success example ejemplos ajax json jquery-1.5 jqxhr

ajax - example - ¿Por qué jqXHR.responseText devuelve una cadena en lugar de un objeto JSON?



jquery ajax post (5)

Está utilizando $ .ajax de una manera que los documentos no describen. Usar json como tipo de datos solo significa que los datos pasados ​​a la devolución de llamada correcta serán analizados. Úselo así:

$.ajax({ dataType:''json'', type: ''GET'', url: "http://example.com/api/" success: function(data, textStatus, jqXHR) { // `data` contains parsed JSON }, error: function(jqXHR, textStatus, errorThrown) { // Handle any errors } });

Tengo una solicitud $ .ajax () con el tipo de datos configurado en "json". El servidor devuelve JSON con el tipo de mime correcto de "application / json". Y sin embargo, el texto de respuesta en mi objeto jqXHR es siempre una cadena. ¿Qué estoy haciendo mal? ¿Es así como se supone que debe funcionar?

Así es como estoy haciendo la llamada:

var options = { dataType:''json'', type: ''GET'', url: "http://example.com/api/" }; var key = "PassToCallback"; var jqXHRObject = $.ajax(options).then( function(data, textStatus, jqXHR, key) { this.success(data, textStatus, jqXHR, key); }, function(jqXHR, textStatus, errorThrown) { this.error(jqXHR, textStatus, errorThrown); } ); console.log(jqXHRObject.getResponseHeader("content-type")); // application/json console.log(typeof jqXHRObject.responseText); // string

Así que tengo que hacer un $.parseJSON(jqXHRObject.responseText) para obtener un objeto real. Esto parece innecesario ya que $ .ajax () debería convertir automáticamente responseText de acuerdo con los documentos. ¡Gracias!


No veo nada en la documentación que sugiera que responseText sea otra cosa que no sea exactamente lo que su nombre implica: texto.

¿Por qué no usar simplemente .getJSON ? Eso eliminaría la mitad del código que escribiste y convertirá la respuesta a JSON. Ganar / ganar


Paso 1: Stringify el jqXHR

var errorString = JSON.stringify(jqXHR.responseText);

Paso 2: cambie esa cadena a Jquery Object

var $errorObj = $(errorString);

Paso 3: Encuentre y obtenga qué parte de responseText desea.

var errorMessage = $errorObj.find(''p'').eq(1).text(); /* Here Im finding `Message:` thrown by the server, which is inside <p> tag */

Eso es.

$.ajax( /* ... */ ).fail( function(jqXHR, textStatus, errorThrown) { var errorString = JSON.stringify(jqXHR.responseText); var $errorObj = $(errorString); var errorMessage = $errorObj.find(''p'').eq(1).text(); alert(errorMessage); } );


Tratar

$.ajaxSetup({ "error": function(jqXHR, status, thrownError) { alert(''error''); console.log(jqXHR.responseJSON); } });


Yo tuve el mismo problema. Devuelvo una cadena porque está formulada a partir de una excepción. Por ejemplo, uso un oyente kernel con serialización para json en mi proyecto Symfony2. Lo cual es correcto para los encabezados de REST adecuados.

De todos modos, solo analízalo; esto funciona para mí:

$.ajaxSetup({ "error": function(jqXHR, status, thrownError) { alert(''error''); var responseText = jQuery.parseJSON(jqXHR.responseText); console.log(responseText); } });