2012-07-09 6 views
5

Ich habe ein seltsames Problem beim Analysieren von JSON-Zeichenfolgen in jQuery AJAX-Antwort. Hier ist mein Code:Firefox kann JSON-Zeichenfolge in jQuery AJAX-Antwort nicht analysieren

$.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; 
    } 
}); 

Auf IE, Chrome und Safari, erhalte ich JSON-String in Alarm, aber auf Firefox, ich bin

[obj XMLDocument]

in der Warnung bekommen.

Hier FF Konsole:

enter image description here

obj ist null, aber ich kann die Antwort JSON-String in der Konsole unter Textattribut

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

Gibt es Gründe für dieses Verhalten sehen ?

Antwort

5

Problem war auf Servlet-Seite. Ich musste contentType einstellen, damit es funktioniert.

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

Das ist kein gültiger JSON-String. Eine JSON-Zeichenfolge ist praktisch die rechte Seite einer Zuweisung in JS.

z.B.

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

Die von ^ angegebenen Teile entsprechen, was Sie erhalten würden, wenn Sie die x/y/z Vars zu JSON-Strings umgewandelt.

Wenn Sie Ihre JSON-Zeichenfolge nicht als JS-Zuweisung schreiben können, z.

var x = ...json_string_here...; 

dann ist es nicht gültig JSON. Ihr Snippet kocht auf:

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

das ist ein Syntaxfehler.

+0

dann warum funktioniert es gut auf anderen Browsern? – JAVAGeek

+0

Zufall wahrscheinlich. Die Tatsache, dass es auf anderen Browsern funktioniert, bedeutet nicht, dass es richtiger JSoN ist. – WhyNotHugo

+0

'{" status ":" done "," redirect ":" some_url "}' ist ihr Problem mit dieser JSON-Zeichenfolge? – JAVAGeek

Verwandte Themen