Firefox可以';在jQuery AJAX响应中解析JSON字符串

Firefox可以';在jQuery AJAX响应中解析JSON字符串,jquery,ajax,json,firefox,Jquery,Ajax,Json,Firefox,在jQueryAjax响应中解析JSON字符串时,我遇到了一个奇怪的问题。这是我的密码: $.ajax({ type: "POST", url: "Save", data: { expiry: expiry, settings: settings } }).done(function (msg) { alert(msg); var obj = jQuery.parseJSON(msg); if (obj.st

在jQueryAjax响应中解析JSON字符串时,我遇到了一个奇怪的问题。这是我的密码:

$.ajax({
    type: "POST",
    url: "Save",
    data: {
        expiry: expiry,
        settings: settings
    }
}).done(function (msg) {
    alert(msg);
    var obj = jQuery.parseJSON(msg);
    if (obj.status == "done") {
        window.location = obj.redirect;
    }
});
在IE、Chrome和Safari上,我得到了JSON字符串的警告,但在Firefox上,我得到了警告

[obj XMLDocument]

在警报中

这里是FF控制台:

obj为null,但我可以在控制台的text属性下看到响应JSON字符串

responses=Object { xml=document, text="{"status":"done","redir...ippetImage\/s\/6abb68"}

这种行为的原因是什么?

这不是有效的JSON字符串。无论出于何种目的,JSON字符串都只是JS中赋值的右侧

e、 g

^
所指示的部分对应于将x/y/z变量转换为JSON字符串所得到的部分

如果您不能将json字符串编写为JS赋值,例如

var x = ...json_string_here...;
那么它就不是有效的JSON。您的代码片段可以归结为:

var x = responses=Object { .... }

这是一个语法错误。

问题出现在servlet端。我必须设置contentType以使其工作

response.setContentType("text/JSON");

可能是巧合。它在其他浏览器上工作并不意味着它是正确的JSoN。
{“状态”:“完成”,“重定向”:“某些url”}
他们的JSoN字符串有问题吗?
response=Object{…}
是Firebug打印对象的方式。你误解了这个问题(还有JSON规范:
{a:'b',c:'d'}
是无效的JSON,
{a:'b',c:'d'}
是无效的)
response.setContentType("text/JSON");