服务器返回此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字符串。
答案 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脚本中将执行脚本,其他任何东西都将执行 以字符串形式返回)。
答案 1 :(得分:1)
您可以直接直接使用data
对象..
无需使用$.parseJSON();
答案 2 :(得分:0)
你在jQuery中也有一个$ .getJSON快捷方法。也许jQuery会自动使用这种情况下的最佳配置,并可能开始工作