Tengo este bloque de código para publicar una solicitud HTTP a través del método jquery .post().
$.post("/product/update", formPostData) .done(function (data) { // success alert(data.product_id + ' was updated!'); }) .fail(function (data) { // fail, but which request? }); Cuando tiene éxito, es fácil saber con qué solicitud estamos tratando, ya que el json que devuelve el servidor tiene el 'product_id' que necesito.
Pero si falla debido a un error en el que el servidor no responde, un problema de conectividad, por ejemplo, ¿cómo puedo saber qué solicitud ha fallado?
El objeto data no tiene pistas porque solo contiene la respuesta del servidor.
¿Cómo puedo pasar un valor al controlador .fail() para poder determinar qué solicitud ha fallado?
El objeto this es útil aquí. Debería poder analizar this.data y obtener la información de su publicación desde allí:
.fail(function (jqXHR, textStatus, errorThrown) { console.log(this.data); });Otra alternativa sería escribir en el propio objeto XHR, y luego está ahí para usted en el método de fail , y no requeriría que use un cierre:
var obj = { a: 1 }; var xhr = $.post("/product/update", obj) .done(function (data) {}) .fail(function (jqXHR, textStatus, errorThrown) { console.log(this.data); // The raw string a=1 which was posted console.log(jqXHR.postData); // The {a: 1} javascript object }); xhr.postData = obj;