为什么jQuery.parseJSON在Firefox中不解析这个有效的JSON文档?

时间:2012-10-26 00:20:48

标签: javascript jquery json firefox

服务器返回此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字符串。

3 个答案:

答案 0 :(得分: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');

这只是猜测。

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

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

关于this答案,应该是application/json

<强>参考

如何在jQuery中自动检测dataType?

  

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

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

答案 1 :(得分:1)

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

无需使用$.parseJSON();

答案 2 :(得分:0)

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

Here is the $.getJSON documentation