2012-07-09 134 views
5

我在尝试解析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"} 

任何理由行为?

回答

5

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

response.setContentType("text/JSON"); 
1

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

例如

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 { .... } 

这是一个语法错误。

+0

那么为什么它在其他浏览器上正常工作? – JAVAGeek 2012-07-09 20:08:14

+0

可能是巧合。它在其他浏览器上工作的事实并不意味着它是正确的JSoN。 – WhyNotHugo 2012-07-09 20:31:14

+0

'{“status”:“完成”,“重定向”:“some_url”}是他们对这个json字符串的任何问题? – JAVAGeek 2012-07-09 20:36:01