Firefox无法解析jQuery AJAX响应中的JSON字符串

时间:2012-07-09 20:02:01

标签: jquery ajax json firefox

我在尝试解析jQuery AJAX响应中的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控制台:

enter image description here

obj为null ,但我可以在文本属性

下的控制台中看到响应JSON字符串
responses=Object { xml=document, text="{"status":"done","redir...ippetImage\/s\/6abb68"}

出现这种行为的原因是什么?

2 个答案:

答案 0 :(得分:5)

问题出在servlet端。我必须设置内容类型才能使其正常工作。

response.setContentType("text/JSON");

答案 1 :(得分:1)

这不是有效的JSON字符串。出于所有意图和目的,JSON字符串只是JS中赋值的右侧。

e.g。

var x = 7;
        ^
var y = [1,2,3];
        ^^^^^^^
var z = {a:'b', c: 'd'};
        ^^^^^^^^^^^^^^^

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

如果你不能把你的json字符串写成JS赋值,例如

var x = ...json_string_here...;

然后它不是有效的JSON。你的代码片段归结为:

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

这是语法错误。