Estoy usando jQuery para hacer una solicitud AJAX. Quiero realizar diferentes acciones, ya sea que el código de estado HTTP sea un error 400 o un error 500. ¿Cómo puedo conseguir esto?
$.ajax({
type: 'POST',
url: '/controller/action',
data: $form.serialize(),
success: function(data){
alert('horray! 200 status code!');
},
error: function(data){
//get the status code
if (code == 400) {
alert('400 status code! user error');
}
if (code == 500) {
alert('500 status code! server error');
}
},
});
Actualizar:
@GeorgeCummins mencionó que "parecía extraño" trabajar con el cuerpo de respuesta. Esta es la primera vez que intento hacer este tipo de cosas. ¿Mi enfoque no es una buena práctica? ¿Qué recomendarías? Creé otra pregunta de StackOverflow para esto aquí: ¿Qué código de respuesta / estado debo enviar a una solicitud AJAX cuando hay un error de validación de usuario / formulario?
data
estaba siendo pasa al método de error, pero en realidadjqXHR
,textStatus
yerrorThrown
Debes crear un mapa de acciones usando la
statusCode
configuración:$.ajax({ statusCode: { 400: function() { alert('400 status code! user error'); }, 500: function() { alert('500 status code! server error'); } } });
Referencia (desplácese hasta: 'statusCode')
EDITAR (en respuesta a los comentarios)
Si necesita tomar medidas en función de los datos devueltos en el cuerpo de la respuesta (lo que me parece extraño), deberá usar en
error:
lugar destatusCode:
error:function (xhr, ajaxOptions, thrownError){ switch (xhr.status) { case 404: // Take action, referencing xhr.responseText as needed. } }
fuente
400: function() {
. Simplemente elimine la alerta () y agregue el código necesario.400: function() {
?Otra solución es utilizar la función response.status. Esto le dará el estado http que devuelve la llamada ajax.
function checkHttpStatus(url) { $.ajax({ type: "GET", data: {}, url: url, error: function(response) { alert(url + " returns a " + response.status); }, success() { alert(url + " Good link"); } }); }
fuente
utilizar
statusCode: { 404: function() { alert('page not found'); } }
-
$.ajax({ type: 'POST', url: '/controller/action', data: $form.serialize(), success: function(data){ alert('horray! 200 status code!'); }, statusCode: { 404: function() { alert('page not found'); }, 400: function() { alert('bad request'); } } });
fuente