2010-04-23 18 views
39

Tengo que modificar un proyecto escrito por otra persona. Debido a que el código es un desastre, realmente no puedo cambiar este $ .post() (o reemplazarlo por $ .ajax()). Lo que necesito hacer es saber si la publicación arroja algo más que JSON y devolverlo.manejo de errores con .post()

$.post('balbal.html', json, function(data) { ... my coude ... }, 'json') 

Puedo ver la respuesta de la publicación en el archivo console.log. ¿Hay una manera simple de recuperarlo?

Respuesta

13

Hay un par de maneras de hacerlo, pero si usted no está recibiendo la respuesta de error disponible a través del objeto de datos JSON devuelto, puede usar $.ajaxSetup() para definir los valores predeterminados para todas las llamadas ajax a través de jQuery. Aunque el método $.post() no especifica un manejador de errores o devolución de llamada en sí mismo, el método $.ajaxSetup() capturará fallas ajax y ejecutará la función que defina para él.

Alternativamente, también hay una función $.ajaxError() que hará el mismo tipo de cosas.

Tenga en cuenta que esto no funcionará si su respuesta JSON se devuelve correctamente, pero con un código de error del lado del servidor. Si desea capturar este tipo de casos, es mejor que los busque con el método $.ajaxComplete()

+0

funcionó estableciendo la función de error predeterminada con $ .ajaxSetup() ... – meo

2

Puede usar $.ajax() ($.post es un atajo que termina llamándolo de todos modos) y define la devolución de llamada de error.

O, si realmente no quiere hacer eso, llamar

$.ajaxError(function(){ 
    //error handler 
}) 

antes de que $.post

+0

no hay ningún error de devolución de llamada en $ .post()? – meo

+0

http://api.jquery.com/jQuery.post/ No se maneja ningún error en '$ .post' porque es solo un método abreviado para guardar el tipeo. – Victor

+0

probé el ajaxError pero no funciona. Recibo una respuesta de la publicación pero es un error de php y no el json que espero. – meo

97

Defina la devolución de llamada de error inmediatamente después de la publicación. Tenga en cuenta la colocación de punto y coma solo al final.

$.post('balbal.html', json, function(data) { 
    // ... my code ... 
}) 
.fail(function(response) { 
    alert('Error: ' + response.responseText); 
}); 

http://api.jquery.com/deferred.fail/

Para versiones anteriores de jQuery (pre-1.8) Uso.error vez con la misma sintaxis.

+6

+1 Brilliant :) – Usman

+0

Sería bueno obtener el mensaje de error real, pero esto es genial thanx – John

+5

@ John y cualquiera que venga aquí en el futuro, si lo hace .fail (res), puede hacer res.responseText para acceder al mensaje de error. –