ajax jquery-1.5

¿Cómo obtener el código de estado de respuesta de jQuery.ajax?



jquery-1.5 (6)

En el siguiente código, todo lo que intento hacer es obtener el código de respuesta HTTP de una llamada jQuery.ajax. Luego, si el código es 301 (movido permanentemente), muestre el encabezado de respuesta ''Ubicación'':

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>jQuery 301 Trial</title> <script src="http://code.jquery.com/jquery-1.5.1.min.js"></script> <script type="text/javascript"> function get_resp_status(url) { $.ajax({ url: url, complete: function (jqxhr, txt_status) { console.log ("Complete: [ " + txt_status + " ] " + jqxhr); // if (response code is 301) { console.log ("Location: " + jqxhr.getResponseHeader("Location")); // } } }); } </script> <script type="text/javascript"> $(document).ready(function(){ $(''a'').mouseenter( function () { get_resp_status(this.href); }, function () { } ); }); </script> </head> <body> <a href="http://ow.ly/4etPl">Test 301 redirect</a> <a href="http://cnn.com/not_found">Test 404 not found</a> </body> </html>

¿Puede alguien señalar dónde me estoy equivocando? Cuando reviso el objeto ''jqxhr'' en Firebug, no puedo encontrar el código de estado, ni el encabezado de respuesta ''Ubicación''. Establecí el punto de interrupción en la última línea de ''completo''.

Muchas gracias.


Cuando su solicitud XHR devuelve una respuesta Redirigir (estado HTTP 301, 302, 303, 307), XMLHttpRequest sigue automáticamente la URL redirigida y devuelve el código de estado de esa URL .

Puede obtener los códigos de estado sin redireccionamiento (200, 400, 500, etc.) a través de la propiedad de status del objeto xhr.

Por lo tanto, no puede obtener la ubicación redireccionada del encabezado de respuesta de una solicitud 301 , 302 , 303 o 307 .

Es posible que tenga que cambiar la lógica del servidor para responder de forma que pueda manejar el redireccionamiento, en lugar de dejar que el navegador lo haga. Un ejemplo de implementación .


Encontré este viejo hilo buscando una solución similar y encontré la respuesta aceptada para usar el método .complete() de jquery ajax . Cito el aviso en el api.jquery.com/jQuery.ajax aquí:

Las devoluciones de llamada jqXHR.success (), jqXHR.error () y jqXHR.complete () están en desuso a partir de jQuery 1.8. Para preparar su código para su eventual eliminación, use jqXHR.done (), jqXHR.fail () y jqXHR.always () en su lugar.

Para conocer el status code de status code de una respuesta ajax, uno puede usar el siguiente código:

$.ajax( url [, settings ] ) .always(function (jqXHR) { console.log(jqXHR.status); });

Funciona de manera similar para .done() y .fail()


Probablemente sea más idiomático jQuery usar la propiedad statusCode del objeto parámetro pasado a la función $ .ajax:

$.ajax({ statusCode: { 500: function(xhr) { if(window.console) console.log(xhr.responseText); } } });

Sin embargo, como dijo , no es posible detectar los códigos de estado 301 en javascript.


Puede verificar el contenido de su respuesta, solo console.log y verá que la propiedad tiene un código de estado. Si no entiende jsons, consulte el video: https://www.youtube.com/watch?v=Bv_5Zv5c-Ts

Explica los conocimientos básicos que te permiten sentirte más cómodo con javascript.

Puede hacerlo con una versión más corta de la solicitud ajax, consulte el código anterior:

$.get("example.url.com", function(data) { console.log(data); }).done(function() { // TO DO ON DONE }).fail(function(data, textStatus, xhr) { //This shows status code eg. 403 console.log("error", data.status); //This shows status message eg. Forbidden console.log("STATUS: "+xhr); }).always(function() { //TO-DO after fail/done request. console.log("ended"); });

Ejemplo de salida de consola:

error 403 STATUS: Forbidden ended


Veo el campo de estado en el objeto jqXhr, aquí hay un violín que funciona:

http://jsfiddle.net/magicaj/55HQq/3/

$.ajax({ //... success: function(data, textStatus, xhr) { console.log(xhr.status); }, complete: function(xhr, textStatus) { console.log(xhr.status); } });


jqxhr es un objeto json:

devoluciones completas:
El objeto jqXHR (en jQuery 1.4.x, XMLHTTPRequest) y una cadena que categoriza el estado de la solicitud ("success", "notmodified", "error", "timeout", "abort" o "parsererror").

ver: jQuery ajax

entonces lo harías:

jqxhr.status para obtener el estado