Tengo una siguiente solicitud de publicación de jQuery:
$.post("ajax.php", data).done( function(response){ // do something when response is ok } ).fail( function(response){ $("#error").html(response); } ); En mi archivo ajax.php , cuando algo sale mal, devuelvo el código de respuesta HTTP 400 con un mensaje:
header("HTTP/1.0 400 Error"); echo "Some error message"; exit(); Cuando verifico la respuesta de una llamada defectuosa en mi navegador, puedo ver el código de Status Code:400 Bad Request y un texto de respuesta que pasé en un mensaje de error. Pero la devolución de llamada .fail de jQuery no muestra mi response .
¿Cómo puedo obtener acceso al texto de respuesta de falla/error?
EDITAR
Probé mi código y se está activando la devolución de llamada .fail , simplemente no puedo mostrar el mensaje de respuesta.
Necesitas usar jqXHR :
El objeto jQuery XMLHttpRequest (jqXHR) devuelto por $.ajax() a partir de jQuery 1.5 es un superconjunto del objeto XMLHttpRequest nativo del navegador. Por ejemplo, contiene propiedades responseText y responseXML, así como un método getResponseHeader(). Cuando el mecanismo de transporte es diferente a XMLHttpRequest (por ejemplo, una etiqueta de secuencia de comandos para una solicitud JSONP), el objeto jqXHR simula la funcionalidad XHR nativa siempre que sea posible.
.fail es uno de los métodos Promise disponibles del objeto jqXHR,
jqXHR.fail(function( jqXHR, textStatus, errorThrown ) {});
Puede usar la propiedad responseText para obtener el mensaje de error como:
$.post("ajax.php", data).done( function(response){ // do something when response is ok } ).fail( function(jqXHR, textStatus, errorThrown) { $("#error").html(jqXHR.responseText); } );Referencia: http://api.jquery.com/jquery.ajax/#jqXHR
Siempre uso 500 para un código de falla ajax y generalmente lo detecta .fail para mí. JQ API para .post tiene una larga lista de enlaces anidados que describen cómo manejan el objeto JqXHR y cómo interactúa con JQ en su conjunto.
Dado que no está activando .fail con su estado, puede hacer que su éxito verifique su código de estado específico en la función .success o .done de esta manera.
//post stuff .success(function(response){ if(response.status == 400){ //error stuff } });La ventaja de realizar sus propias comprobaciones en .done o .success es que puede definir algunos comportamientos ingeniosos para diferentes estados que le gustaría devolver desde su servidor. Hay literalmente docenas de formas diferentes de manejar las devoluciones de ajax y definir los comportamientos de devolución de llamada.
** Aquí hay otra pregunta SO que tiene otras resoluciones.
Manejo de errores jQuery AJAX (códigos de estado HTTP)
**La sintaxis aquí es ligeramente diferente porque esta pregunta se centró en el método .ajax en lugar de .post, pero las ideas y resoluciones propuestas aún deberían funcionar.