2012-07-09 21 views
5

Tengo un problema extraño al intentar analizar cadenas JSON en la respuesta jQuery AJAX. Aquí está mi código:Firefox no puede analizar cadena JSON en jQuery Respuesta 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; 
    } 
}); 

En IE, Chrome y Safari, estoy consiguiendo cadena JSON en alerta, pero en Firefox, estoy consiguiendo

[obj XMLDocument]

en la alerta.

Aquí es la consola FF:

enter image description here

obj es nula, pero puedo ver la cadena JSON respuesta en la consola bajo el atributo de texto

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

algún motivo para este comportamiento ?

Respuesta

5

El problema estaba en el lado del servlet. Tuve que configurar contentType para que funcione.

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

No es una cadena JSON válida. Una cadena JSON es, para todos los intentos y propósitos, simplemente el lado derecho de una tarea en JS.

p. Ej.

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

Las partes indicadas por ^ se corresponden con lo que se obtiene si se convirtió la x/y/z vars a cadenas JSON.

Si no puede escribir su cadena json como una tarea JS, p.

var x = ...json_string_here...; 

luego no es válido JSON. Su fragmento se reduce a:

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

que es un error de sintaxis.

+0

¿por qué funciona bien en otros navegadores? – JAVAGeek

+0

Coincidencia probablemente. El hecho de que funcione en otros navegadores no significa que sea correcto JSoN. – WhyNotHugo

+0

'{" estado ":" hecho "," redirigir ":" some_url "}' ¿Hay algún problema con esta cadena json? – JAVAGeek

Cuestiones relacionadas