【问题标题】:Separating HTTP Response Body from Header in JavaScript在 JavaScript 中将 HTTP 响应正文与标头分离
【发布时间】:2018-04-04 14:33:41
【问题描述】:

使用 PHP 和 AngularJS 从回调中提取变量

我正在使用 AngularJS 和 Cloudant 构建一个应用程序,当我包含一个新文档时,回调会在响应中包含修订号,但它都是一个大字符串,如下所示:

HTTP/1.1 201 Created
X-Frame-Options: DENY
X-Couch-Request-ID: cf04aa4a96
Server: CouchDB/2.1.1 (Erlang OTP/17)
Location: https://xxx.cloudant.com/xxx/xxx/1e829630-cdb6-463a-8c25-9cc140ff8ab0
Date: Wed, 04 Apr 2018 14:15:59 GMT
Content-Type: application/json
Content-Length: 99
Cache-Control: must-revalidate
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Cloudant-Request-Class: write
X-Cloudant-Backend: bm-cc-uk-04
Via: 1.1 lb1.bm-cc-uk-04 (Glum/1.50.4)

{"ok":true,"id":"1e829630-cdb6-463a-8c25-9cc140ff8ab0","rev":"1-05a055a4f2e4baf71b46a14386eb7fab"}

如何从这个字符串中提取 rev 并将其保存在变量中?

我已经尝试过了,但它不起作用,因为响应是一个包含对象的字符串...

$promisedb.then(function (datawop) {
    $scope.rev = datawop.data.rev;
}

【问题讨论】:

  • 您使用的是哪个角度?您只需要将字符串转换为对象...我不记得如果 angular 内置了这个...您可以使用..datawop = JSON.parse(datawop); $scope.rev = datawop.data.rev;
  • 描述问题。“它不起作用”不是问题陈述。告诉我们预期的行为应该是什么。告诉我们错误消息的确切措辞是什么,以及产生它的代码行。在问题的标题中简要说明问题。
  • 在 JavaScript/NodeJS 中,您可以使用内置的 JSON.parse() 将字符串化对象转换为普通对象,也可以使用 JSON.stringify() 进行相反的操作。我不确定PHP,但PHP中可能有类似的东西。

标签: javascript php angularjs couchdb


【解决方案1】:

HTTP 标头以序列\r\n\r\n(空行)终止。

$promisedb.then(function (response) {
    var splitArray = response.data.split("\r\n\r\n");
    var headers = splitArray[0];
    var body = splitArray[1];
    var data = JSON.parse(body);
    $scope.rev = data.rev;
}

【讨论】:

  • JavaScript 在所有平台上表示的 HTTP 标头终止是否相同?我的意思是,在 Linux 机器上,我们应该使用\r\n\r\n 还是只使用\n\n?抱歉,这可能不是最聪明的问题。
  • RFC2616 特别声明了 CRLF。否则就是非法的 HTTP/1.1。
猜你喜欢
  • 2013-05-17
  • 2011-09-30
  • 2015-09-29
  • 2023-03-25
  • 2015-09-16
  • 2012-12-07
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多