2

服务器返回此 JSON 文档:

{
"username-found": true,
"question-required": true
}

它成功通过了 JSONLint 的有效性检查。

在网络浏览器中:

$.post('my_url', {"post":"data"}, function(data) {
  data = $.parseJSON(data);
});

该代码在 Opera 12 浏览器中运行并成功解析 JSON 文档,但在 Firefox 16 中,出现 JavaScript 错误并显示“格式不正确”。

JQuery 的版本是 1.7.2。

我看不出我在那里做错了什么,你知道吗?

编辑:

它与服务器返回 JSON 的方式有什么关系吗?这里是:

return new StreamingResolution("text", new StringReader(json.toString()));

建议,我可能已经找到原因了。当我这样做时alert(data),Firefox 告诉我那data是一个对象,Opera 告诉我那data是 JSON 字符串。

4

3 回答 3

2

解决方案 1(客户端)- 在 jQuery 请求中设置 DataType

我认为该特定浏览器版本的内部结构有些不同(因为 jQuery 尝试自动检测 dataType 并且在 JSON 响应的情况下在内部进行解析)并且 JSON 自动编码为 FF 而不是在 Opera 中?

尝试添加 dataType 以便 jQuery 处理这个(我更喜欢那个):

$.post('my_url', {"post":"data"}, function(data) {
    // data should be an json object here
}, 'json');

这只是一个猜测。

或解决方案 2(服务器)- 发送 MIME 类型

您还可以从服务器发送正确的 MIME 类型,这样您就不必在客户端上设置数据类型。这取决于你,但我认为这将是正确的解决方案。

关于这个答案应该是application/json

参考

jQuery中如何自动检测dataType?

默认值:智能猜测(xml、json、脚本或 html)您期望从服务器返回的数据类型。如果没有指定,jQuery 将尝试根据响应的 MIME 类型推断它(XML MIME 类型将产生 XML,在 1.4 中 JSON 将产生 JavaScript 对象,在 1.4 中脚本将执行脚本,其他任何内容都将是作为字符串返回)。

来源:http ://api.jquery.com/jQuery.ajax/

于 2012-10-26T00:25:45.093 回答
1

你可以直接直接使用data对象..

无需使用$.parseJSON();

于 2012-10-26T00:30:22.303 回答
0

jQuery 中还有一个 $.getJSON 快捷方法。也许 jQuery 会自动为这种情况使用最佳配置,并可能开始工作

这是 $.getJSON 文档

于 2012-10-26T00:29:56.827 回答