jQuery $ .ajax manejo de errores

Posible duplicado:
jQuery ajax error function

Estoy tratando de reemplazar un controlador de errores ajax “global” con una función a la que puedo llamar desde cada llamada ajax debido a problemas observados en nuestra implementación.

$(document).ajaxError(function(e, jqXHR, settings, exception) { // using BrowserDetect function to get browser info var browser = BrowserDetect.browser; var browserVer = BrowserDetect.version; var browserOS = BrowserDetect.OS; var ajax_url = settings.url; $.ajax({async: true, type: 'POST', url: AJAX_ERROR_LOG_URL, dataType: 'json', data: 'host='myhost.com&status='+jqXHR.status+'&error='+jqXHR.responseText+'&expmessage='+exception.message+'&url=' +ajax_url+'&browser='+browser+'&browserVer='+browserVer+'&browserOS='+browserOS }); if (jqXHR.status === 0) { final_message(ERROR_MSG + '0'); // Not connected. Please verify network is connected. } else if (jqXHR.status == 404) { final_message(ERROR_MSG + '404'); // Requested page not found. [404] } else if (jqXHR.status == 500) { final_message(ERROR_MSG + '500'); // Internal Server Error [500]. } else if (exception === 'parsererror') { final_message(ERROR_MSG + '1'); // Requested JSON parse failed. } else if (exception === 'timeout') { final_message(ERROR_MSG + '2'); // Time out error. } else if (exception === 'abort') { final_message(ERROR_MSG + '3'); // Ajax request aborted. } else { if(browserVer == '7' && browser == 'Explorer') { final_message(ERROR_MSG + '100'); // Uncaught Error } else { final_message(ERROR_MSG + '99'); // Uncaught Error } } }); 

Quiero convertir esto en una función y llamarlo así:

 $.ajax({async: true, type:'POST', url: url, dataType: 'json', data: "username="+username+"&password="+pass, success: ajaxLoginResult error: logAjaxError(jqXHR, textStatus, errorThrown) }); function logAjaxError(jqXHR, textStatus, errorThrown) { // more code here to log the error } 

El problema radica en el hecho de que no puedo obtener la url de ajax callpassed a la callback de error, ya que lo único que se pasa es jqXHR, textStatus, errorThrown. En la configuración de .ajaxError, la configuración se pasa y de ahí obtenemos la URL. ¿Algunas ideas?

Editado 2/3: Aquí está la función Add_Course para que la veas:

 function Add_Course(reason) { var eventid = $('#eventid'+$('#obleventcode').attr('value')).val(); var url = AJAX_URL_ADDTOCART + '?sku='+eventid+'&mainitem=true&pid='+pid; if(reason != 'VOUCHER'){ log_url(url); $.ajax({async: true, type:'POST', url: url, dataType: 'json', success: function(data){ if(data.result=='success') { var cemsg_index=reason.indexOf('CEMSG'); if(cemsg_index>=0) { final_ce_message(reason.substr(cemsg_index+6)); } // if(cemsg_index>=0) } else { $('#sm_content .oblcontent').html(data.message); } // if(data.result=='success') }, complete: function(jqXHR, textStatus) { log_url('redirecting to cart'); window.location = CART_URL; } // complete }); } } 

En primer lugar, felicitaciones por comprobar realmente errores. Muchas personas escriben códigos que nunca esperan que las cosas salgan mal en las redes. Decir ah.

En lugar de editar cada llamada a $.ajax , puede llamar a $.ajaxSetup() para que cada llamada use su función para un controlador de errores. La firma del controlador de errores es un error(jqXHR, textStatus, errorThrown) que coincide convenientemente con su función, así que intente llamar a $.ajaxSetup({ error: logAjaxError }) antes de hacer cualquier llamada a $.ajax .

Debería poder acceder a this.url en su callback de error:

 error: logAjaxError(jqXHR, textStatus, errorThrown, this.url)