2012-07-09 17 views
5

Sto riscontrando uno strano problema durante il tentativo di analizzare le stringhe JSON nella risposta AJAX jQuery. Qui è il mio codice:Impossibile analizzare la stringa JSON in jQuery Risposta AJAX

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

su IE, Chrome e Safari, io sono sempre stringa JSON in allerta, ma su Firefox, io sono sempre

[obj XMLDocument]

nell'avviso.

Ecco console FF:

enter image description here

obj è null, ma posso vedere la stringa JSON risposta nella console sotto attributo di testo

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

Qual è il motivo di questo comportamento ?

risposta

5

Il problema era sul lato servlet. Ho dovuto impostare contentType per farlo funzionare.

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

Questa non è una stringa JSON valida. Una stringa JSON è, a tutti gli effetti, semplicemente il lato destro di un compito in JS.

ad es.

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

Le parti indicate dalle ^ corrispondono a quello che si otterrebbe se convertito il x/y/z vars in stringhe JSON.

Se non è possibile scrivere la stringa JSON come assegnazione JS, ad es.

var x = ...json_string_here...; 

quindi non è valido JSON. Il tuo snippet si riduce a:

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

che è un errore di sintassi.

+0

quindi perché funziona correttamente su altri browser? – JAVAGeek

+0

Coincidenza probabilmente. Il fatto che funzioni su altri browser non significa che sia corretto JSoN. – WhyNotHugo

+0

'{" status ":" done "," redirect ":" some_url "}' è il loro problema con questa stringa json? – JAVAGeek

Problemi correlati