2010-01-18 6 views
39

función de error AJAX de jQuery tiene los siguientes parámetros:cuerpo de la respuesta AJAX para su uso en respuesta de error

error(XMLHttpRequest, textStatus, errorThrown) 

¿Cuál es la mejor manera de multi-navegador para obtener el cuerpo de la respuesta?

Funciona (de manera confiable en todos los navegadores)?

$.ajax({ 
    error: function(http) { 
    alert(http.responseText); 
    } 
}); 
+0

el http.responseText funciona en todos los navegadores modernos, y el controlador de errores se activa para todos los errores de estado HTTP 4xx y 5xx. Puede variar el manejo del error verificando el código de estado HTTP accesible como 'http.status' –

Respuesta

-4

Hay una función oculta que puede extraer los datos de istance XHR:

var responseText = $.httpData(xhr) 

Si pasa "json" como un segundo parámetro que tratará la respuesta como una cadena JSON.

Tenga en cuenta que puede obtener un error porque no hay respuesta (problema de red, por ejemplo). Asegúrate de cubrir esa caja también. Además, creo (no estoy seguro) de que jQuery invoca el controlador error si el servidor devuelve un estado 4xx o 5xx.

+4

Gracias. A juzgar por la fuente, parece que 'xhr.responseText' funcionará para los datos HTML normales –

+23

Parece que la función' $ .httpData' se ha ido al menos desde jQuery 1.5.2. – dowski

+4

-1 para usar funciones no documentadas. – rightfold

67

A partir de jQuery 1.4.1 se debe utilizar:

var json = JSON.parse(xhr.responseText); 

Ver http://api.jquery.com/jQuery.parseJSON/.

+3

Después de garantizar, por supuesto, que el tipo de contenido es en realidad JSON. –

+0

Ejem ... Sí. :-) – dowski

+2

Ahora dice: "A partir de jQuery 3.0, $ .parseJSON está en desuso. Para analizar las cadenas JSON utilice en su lugar el método nativo JSON.parse". – JHS

17

Para una respuesta más reciente y general (ya que jQuery 1.5), que haría uso de la jqXHR objeto:

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) { 
    alert(jqXHR.responseText); 
}) 

Alternativamente responseJSON se pueden utilizar para conseguir el cuerpo de la respuesta ya se analiza

$.ajax(url).fail(function(jqXHR, textStatus, errorThrown) { 
    console.log(jqXHR.responseJSON); 
}) 
0

Un ejemplo de uso sencillo con jQuery:

var url = '/'; 
$.get(url).then(
    function(response) { 
     $("#result").html(response); 
    }, 
    function(jqXHR) { 
    $("#result").html('Error occurred: '+ jqXHR.statusText + ' ' + jqXHR.status); 
    } 
); 

Esto debería devolver el HTML de la página principal del sitio web actual.

Luego intenta ingresar una URL sin sentido que no existe y ver el error arrojado. Debería obtener "404 Not Found" del servidor web. Pruébelo: JSFiddle here

Cuestiones relacionadas