jQuery $.ajax error handling
本问题已经有最佳答案,请猛点这里访问。
Possible Duplicate:
jQuery ajax error function
我试图用我可以从每个ajax调用调用的函数替换"全局"ajax错误处理程序,因为我们的实现中观察到了问题。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | $(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 } } }); |
我想将其转换为函数并将其称为:
1 2 3 4 5 6 7 8 9 10 11 12 | $.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 } |
问题在于我无法将ajax的url调用到错误回调,因为传递的唯一内容是jqXHR,textStatus,errorThrown。 在.ajaxError设置中,设置被传递,这是我们从中获取URL的位置。
有任何想法吗?
编辑2/3:
以下是Add_Course函数供您查看:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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 }); } } |
首先,祝贺实际检查错误。 因此,许多人编写的代码永远不会让互联网出现问题。 哈。
而不是编辑每次调用
您应该能够在错误回调中访问
1 | error: logAjaxError(jqXHR, textStatus, errorThrown, this.url) |