El objeto jqXHR de jQuery pasado a la devolución de llamada en caso de error no analiza las respuestas json, por lo tanto, responseJSON no está definido, solo está disponible responseText.jquery ajax no analiza json en caso de error
Funciona bien para solicitudes exitosas, yo pongo las cabeceras correctas utilizando dataType: 'json'
de llamada:
$.ajax({
type: 'POST',
url: $form.attr('action'),
data: post_data,
dataType: 'json',
done: done_callback,
fail: fail_callback,
always: always_callback
});
cabeceras de solicitud:
Accept:application/json, text/javascript, */*; q=0.01
X-Requested-With:XMLHttpRequest
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.83 Safari/535.11
encabezados de respuesta:
Content-Type:application/json;charset=utf-8
Status:500
responseText:
{"status":"error","code":500,"message":"A system error occurred, please try again later"}
responseJSON no está definido
se da el caso de que jQuery no analiza JSON cuando la respuesta a las peticiones Ajax no tiene éxito? no puedo encontrar ninguna documentación para confirmar o negar este comportamiento (que podría estar buscando simplemente no lo suficientemente duro)
puedo, evidentemente, sólo tiene que utilizar parseJSON
en el fail
de devolución de llamada.
Tienes razón. El contenido de la respuesta no está 'evaluado 'en el error. Si recibe JSON en 500 errores, simplemente analícelo usted mismo. – Strelok
sí. @Arun con toda razón me indicó la línea exacta en la que jquery tomó esta decisión de no pasar la respuesta a través de los convertidores de tipo. – Rob