51

Quiero comprobar si una página devuelve el código de estado 401. ¿Es esto posible?¿Cómo obtengo el código de estado HTTP con jQuery?

Aquí está mi intento, pero sólo devuelve 0.

$.ajax({ 
    url: "http://my-ip/test/test.php", 
    data: {}, 
    complete: function(xhr, statusText){ 
    alert(xhr.status); 
    } 
}); 
+0

comprobar el valor de 'statusText', el segundo parámetro a la función de devolución de llamada en su lugar. –

+1

esto alerta "Autorización requerida". Puedo trabajar con eso, pero una alerta 401 sería mejor;) – horgen

Respuesta

17

Utilizar la devolución de llamada de error.

Por ejemplo:

jQuery.ajax({'url': '/this_is_not_found', data: {}, error: function(xhr, status) { 
    alert(xhr.status); } 
}); 

alertará 404

+0

de hecho lo hizo. Soy un poco nuevo en jQuery. ¿Pero qué pasa con el estado 401? ¿Cómo guardo el estado de una variable? o_O – horgen

+0

Firebug devuelve esto: GET http: //my-ip/test/test.php 401 Se requiere autorización – horgen

+0

Mostrará 401 de la misma manera. ¿Qué quieres hacer exactamente con el error? – baloo

6

Creo que también debe implementar la función de error del método $.ajax.

error (XMLHttpRequest, textStatus, errorThrown) Función

Una función que se llamará si la petición falla . La función se pasa tres argumentos : El objeto XMLHttpRequest, una cadena que describe el tipo de error que se produjo y un objeto de excepción opcional, si se produjo uno. Los posibles valores para el segundo argumento (además de nulo) son "timeout", "error", "notmodified" y "parsererror".

$.ajax({ 
    url: "http://my-ip/test/test.php", 
    data: {}, 
    complete: function(xhr, statusText){ 
    alert(xhr.status); 
    } 
    error: function(xhr, statusText, err){ 
    alert("Error:" + xhr.status); 
    } 
}); 
+2

thx, pero complete solo devuelve 0. ¿Es posible obtener el código 401? ? – horgen

+0

¿Estás seguro de que se llama a completo cuando se devuelve un HTTP 401 (no autorizado) del servidor? No he probado, pero esperaría que se llame a error. – GvS

+0

completo Tipo: Función (jqXHR jqXHR, String textStatus) Función a invocar cuando finaliza la solicitud (después de que se ejecutan las devoluciones de llamada correctas y de error).La función obtiene dos argumentos: el objeto jqXHR (en jQuery 1.4.x, XMLHTTPRequest) y una cadena que categoriza el estado de la solicitud ("éxito", "no modificado", "error", "tiempo de espera", "abortar" o "parsererror"). A partir de jQuery 1.5, la configuración completa puede aceptar una serie de funciones. Cada función se llamará a su vez. Este es un Evento Ajax. – pshirishreddy

5
$.ajax({ 
    url: "http://my-ip/test/test.php", 
    data: {}, 
    error: function(xhr, statusText, errorThrown){alert(xhr.status);} 
}); 
75

esto es posible con jQuery $.ajax() método

$.ajax(serverUrl, { 
    type: OutageViewModel.Id() == 0 ? "POST" : "PUT", 
    data: dataToSave, 
    statusCode: { 
     200: function (response) { 
     alert('1'); 
     AfterSavedAll(); 
     }, 
     201: function (response) { 
     alert('1'); 
     AfterSavedAll(); 
     }, 
     400: function (response) { 
     alert('1'); 
     bootbox.alert('<span style="color:Red;">Error While Saving Outage Entry Please Check</span>', function() { }); 
     }, 
     404: function (response) { 
     alert('1'); 
     bootbox.alert('<span style="color:Red;">Error While Saving Outage Entry Please Check</span>', function() { }); 
     } 
    }, success: function() { 
     alert('1'); 
    }, 
}); 
+1

Creo que esto no funciona ahora, lo intenté, ¿alguna idea? – Aravind

+0

Funciona bien. ¿Puedes compartir lo que estás intentando? –

+1

pidió el código de estado 401 – bleuscyther

53

El tercer argumento es el objeto XMLHttpRequest, para que pueda hacer lo que quiera.

$.ajax({ 
    url : 'http://example.com', 
    type : 'post', 
    data : 'a=b' 
}).done(function(data, statusText, xhr){ 
    var status = xhr.status;    //200 
    var head = xhr.getAllResponseHeaders(); //Detail header info 
}); 
+0

Devuelve esto: XMLHttpRequest no puede cargar http://example.com/. Ningún encabezado 'Access-Control-Allow-Origin' está presente en el recurso solicitado. El origen 'http://stackoverflow.com' no está, por lo tanto, permitido. – sidney

+0

Tendrá que habilitar el manejo de CORS para deshacerse del problema 'Access-Control-Allow-Origin'. Dependiendo del tipo de proyecto con el que se encuentre, es posible que no pueda simplemente resolverlo, especialmente si la API está en un dominio diferente y no permite solicitudes de dominios cruzados. – Annjawn

+0

@Annjawn Cómo manejar CORS, como si yo hiciera la misma llamada de API con Php no da ningún error de CORS, pero si yo era ajax para la misma llamada de API, me da un error de CORS. Por favor, hágamelo saber –

5

He encontrado esta solución en la que sólo puede, comprobar el código de respuesta del servidor utilizando el código estado.

Ejemplo:

$.ajax({ 
type : "POST", 
url : "/package/callApi/createUser", 
data : JSON.stringify(data), 
contentType: "application/json; charset=UTF-8", 
success: function (response) { 
    alert("Account created"); 
}, 
statusCode: { 
    403: function() { 
     // Only if your server returns a 403 status code can it come in this block. :-) 
     alert("Username already exist"); 
    } 
}, 
error: function (e) { 
    alert("Server error - " + e); 
} 
}); 
+0

Puede agregar el bloque de código de estado tantas como quiera comprobar. –

+1

Si la respuesta no es exitosa y el código de estado de respuesta no es ni siquiera 403, irá al bloque de error. –

Cuestiones relacionadas