2012-07-09 133 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