【问题标题】:HTTP GET Response parse error (empty String?) - but body is not emptyHTTP GET 响应解析错误(空字符串?) - 但正文不为空
【发布时间】:2015-08-24 19:29:54
【问题描述】:

我正在开发一个 Javascript sn-p,它在 HTTP 请求的帮助下与 本地 Java 服务器通信。

我的请求如下所示:

var req = $.ajax({
    type : "GET",
    dataType : "json",
    url : "http://127.0.0.1:8081", 
    data : data_dict
});

我从 Java 服务器发送的响应标头似乎没问题(至少 Firefox Web 开发人员告诉我是这样)。但是body解析有错误:

JSON.parse:json 数据的第 1 行第 1 列的数据意外结束

好像我的回复是空的...但是当我打开 http://127.0.0.1:8081/?test_request_key=test_request_value 它在我的浏览器中显示预期的正文:

{"test_respond_key":"test_respond_val"}

你有什么提示吗?我不知道在哪里搜索问题...

编辑:完整的响应是

HTTP/1.1 200 OK
Server: Java HTTPStudyServer
Content-Type: application/json
Content-Length: 39
Connection: close

{"test_respond_key":"test_respond_val"}

提前致谢! (很抱歉,如果这是一个简单答案的菜鸟问题,但几个小时的谷歌搜索并没有帮助我)

【问题讨论】:

  • 在您的开发工具中,返回的内容类型是什么(文本/纯文本、应用程序/json 等)?还可以尝试检查任何隐藏字符,并尝试将您的回复粘贴到jsonlint.com 并运行它。
  • 感谢您的链接。它告诉我我的 json 字符串是正确的。我在主帖中添加了完整的回复。好像里面没有空标志:(
  • 您如何处理响应?
  • 通过在数据下方定义成功和错误以及定义 req.done 和 req.fail 函数来尝试此操作。它总是以错误/失败函数结束。
  • 您的网页位于哪个 URL 上?看起来 CORS 可能会发挥作用。

标签: java jquery ajax json http


【解决方案1】:

好的,我找到了解决方案(在您的帮助下!)

问题确实是 CORS!如果您查看http://de.wikipedia.org/wiki/Same-Origin-Policy 中的示例,您会发现对于另一个端口,它不能算作同源

这篇文章给了我证明:Why is same origin policy kicking in when making request from localhost to localhost?

所以我只是将此行添加到响应标头

Access-Control-Allow-Origin: *

现在它就像一个魅力! :)

感谢你们的帮助!

问候

【讨论】:

  • 每个 MDN 的同源策略页面,“如果两个页面的协议、端口(如果指定)和主机相同,则两个页面具有相同的来源。”因此,指定端口会导致这种情况。我想可以通过 nginx(或其他反向代理)实例运行所有 localhost 流量,通过 /api 端点映射您单独端口的 JSON 响应,从而使 CORS 标头问题没有实际意义。
猜你喜欢
  • 1970-01-01
  • 2014-04-25
  • 2014-09-03
  • 2022-09-27
  • 2018-08-16
  • 2014-11-30
  • 2013-03-17
  • 1970-01-01
  • 2016-02-16
相关资源
最近更新 更多