Función de error jQuery ajax

Tengo una llamada ajax pasando datos a una página que luego devuelve un valor.

He recuperado la llamada exitosa de la página, pero la he codificado para que genere un error en el asp. ¿Cómo recupero ese error del jquery?

Por ejemplo:

cache: false, url: "addInterview_Code.asp", type: "POST", datatype: "text", data: strData, success: function (html) { alert('successful : ' + html); $("#result").html("Successful"); }, error: function (error) { **alert('error; ' + eval(error));** } 

Es el error que no entiendo. En la función, ¿qué parámetro debo poner para poder usar el mensaje de error que he planteado en el servidor?

Los parámetros requeridos en una función de error Ajax son jqXHR, exception y puede usarlo de la siguiente manera:

 $.ajax({ url: 'some_unknown_page.html', success: function (response) { $('#post').html(response.responseText); }, error: function (jqXHR, exception) { var msg = ''; if (jqXHR.status === 0) { msg = 'Not connect.\n Verify Network.'; } else if (jqXHR.status == 404) { msg = 'Requested page not found. [404]'; } else if (jqXHR.status == 500) { msg = 'Internal Server Error [500].'; } else if (exception === 'parsererror') { msg = 'Requested JSON parse failed.'; } else if (exception === 'timeout') { msg = 'Time out error.'; } else if (exception === 'abort') { msg = 'Ajax request aborted.'; } else { msg = 'Uncaught Error.\n' + jqXHR.responseText; } $('#post').html(msg); }, }); 

DEMO FIDDLE


Parámetros

jqXHR:

Es en realidad un objeto de error que se ve así

Objeto JqXHR de error Ajax

También puede ver esto en su propia consola del navegador, usando console.log dentro de la función de error como:

 error: function (jqXHR, exception) { console.log(jqXHR); // Your error handling logic here.. } 

Estamos utilizando la propiedad de status de este objeto para obtener el código de error, como si obtenemos el estado = 404, esto significa que no se pudo encontrar la página solicitada. No existe en absoluto. En función de ese código de estado, podemos redirigir a los usuarios a la página de inicio de sesión o a cualquier otra que requiera nuestra lógica empresarial.

excepción:

Esta es una variable de cadena que muestra el tipo de excepción. Entonces, si obtenemos el error 404, el texto de la exception sería simplemente ‘error’. Del mismo modo, podríamos obtener ‘timeout’, ‘abort’ como otros textos de excepción.


Aviso de jqXHR.success() : Las 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() lugar.

Entonces, en caso de que esté usando jQuery 1.8 o superior , tendremos que actualizar la lógica de la función de éxito y error como:

 // Assign handlers immediately after making the request, // and remember the jqXHR object for this request var jqxhr = $.ajax("some_unknown_page.html") .done(function (response) { // success logic here $('#post').html(response.responseText); }) .fail(function (jqXHR, exception) { // Our error logic here var msg = ''; if (jqXHR.status === 0) { msg = 'Not connect.\n Verify Network.'; } else if (jqXHR.status == 404) { msg = 'Requested page not found. [404]'; } else if (jqXHR.status == 500) { msg = 'Internal Server Error [500].'; } else if (exception === 'parsererror') { msg = 'Requested JSON parse failed.'; } else if (exception === 'timeout') { msg = 'Time out error.'; } else if (exception === 'abort') { msg = 'Ajax request aborted.'; } else { msg = 'Uncaught Error.\n' + jqXHR.responseText; } $('#post').html(msg); }) .always(function () { alert("complete"); }); 

¡Espero eso ayude!

Prueba esto:

 error: function(jqXHR, textStatus, errorThrown) { console.log(textStatus, errorThrown); } 

Si desea informar a su interfaz sobre un error de validación, intente devolver json:

 dataType: 'json', success: function(data, textStatus, jqXHR) { console.log(data.error); } 

Tu script asp podría retornar:

 {"error": true} 

Aquí es cómo saca el error asp.

  cache: false, url: "addInterview_Code.asp", type: "POST", datatype: "text", data: strData, success: function (html) { alert('successful : ' + html); $("#result").html("Successful"); }, error: function (jqXHR, textStatus, errorThrown) { if (jqXHR.status == 500) { alert('Internal error: ' + jqXHR.responseText); } else { alert('Unexpected error.'); } } 
  cache: false, url: "addInterview_Code.asp", type: "POST", datatype: "text", data: strData, success: function (html) { alert('successful : ' + html); $("#result").html("Successful"); }, error: function(data, errorThrown) { alert('request failed :'+errorThrown); } 

estás usando una función

 error(error) 

pero jquery en realidad está buscando una función con tres parámetros:

 error(jqXHR, textStatus, errorThrown) 

necesitarás agregar dos parámetros más.

TAMBIÉN: por favor, eche un vistazo a todos los comentarios anteriores que mencionan ‘obsoleto’ 🙂

 $.ajax("www.stackoverflow.com/api/whatever", { dataType:"JSON" data: { id=1, name='example' } }).succes(function (result) { // use result }).error(function (jqXHR, textStatus, errorThrown) { // handle error }); 
 error(jqXHR, textStatus, errorThrown) 

http://api.jquery.com/jQuery.ajax/

De jquery.com:

 The jqXHR.success(), jqXHR.error(), and jqXHR.complete() callback methods introduced injQuery 1.5 are deprecated as of jQuery 1.8. To prepare your code for their eventual removal, use jqXHR.done(), jqXHR.fail(), and jqXHR.always() instead. 

Si quieres manejadores globales, puedes usar:

 .ajaxStart(), .ajaxStop(), .ajaxComplete(), .ajaxError(), .ajaxSuccess(), .ajaxSend()