【问题标题】:Save HTTP response as string in JavaScript在 JavaScript 中将 HTTP 响应保存为字符串
【发布时间】:2020-01-04 08:31:07
【问题描述】:

如何将 HTTP 请求的正文保存为字符串并打印出来?我有一个 HTML 文件,我正在发送一个这样的 HTTP 请求:

function loadXMLDoc(str) {
  var url = "http://192.168.178.37?" + str;
  var http = new XMLHttpRequest();

  http.onreadystatechange = function() {
    if (http.readyState === 4) {
      window.alert(http.response);
    }
  }

  http.open('GET', url, true);
  http.send();
}

另一方面,响应如下所示:

  char rspText[]  = "value=sensorvalue";
  client.println("HTTP/1.1 200 OK");
  client.println("Content-Type: application/x-www-form-urlencoded");
  client.printlnf("Content-Length: %d", strlen(rspText));
  client.println();
  client.print(rspText);

我的问题是应该包含在正文中的http.response 始终为空。我知道我可能使用了错误的 Content-Type。我只是想在响应中发回一个传感器值并将其保存为字符串以供以后使用。

【问题讨论】:

  • 如果服务器以 application/x-www-form-urlencoded 的 Content-Type 进行响应会很奇怪。典型的响应类型是application/jsontext/htmltext/plain。不知道您的用例是什么,如果您只想要一个纯字符串,请使用text/plain
  • 是的,我只想要一个纯字符串,但 text/plain 不知何故对我不起作用,所以我尝试了 application/x-www-form-urlencode ,我至少可以为键设置一个值。我真的只想拥有一个带有传感器值的纯文本并从 html 文件中访问它。我现在为此苦苦挣扎了一段时间。
  • 您可能会遇到错误;检查 http.status 并确保它是 200。
  • 我可以使用 Wireshark 跟踪 GET 请求和响应,一切似乎都很好(text/plain 现在可以使用)。我发现我的字符串是这样的:基于行的文本数据:文本/纯文本(1 行)。我只想读取该字符串并保存它。也许 http.response 是这样做的错误方法? Window.alert(http.response) 也会打开一个窗口,但它是空的。

标签: javascript html http httpresponse


【解决方案1】:

您告诉浏览器期待strlen(rspText) (17) 字节的正文,但随后您错误地发送了文字字符串rspText(注意双引号)而不是您准备的实际响应。

此类问题会导致 HTTP 协议错误,并且可能是浏览器在发生这种情况时将 .response 属性留空。


还可能有问题的是,HTTP 被指定为使用 CRLF 行结尾,而您的示例服务器代码是否遵循这一点尚不清楚。即使浏览器足够宽松以处理 LF 行结尾,也可能有一些繁琐的中间件无法满足。

【讨论】:

  • 哦,是的,我修正了这个错误,但这并没有解决我的问题。也许您对行尾的看法是正确的,我会检查一下。谢谢!
【解决方案2】:

答案是在 Safari 中禁用本地文件限制...

【讨论】:

  • 如果您的 html 文件是静态的,并且您正在像 file:///home/you/your/path/index.js 一样加载它,那么我建议您运行一个小型静态服务器。简单选项的大列表,其中一些已经内置并可供您使用:gist.github.com/willurd/5720255
猜你喜欢
  • 2020-04-17
  • 2021-09-16
  • 2013-06-04
  • 1970-01-01
  • 2022-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-15
相关资源
最近更新 更多