MB3*_*B34 3 ajax error-handling jquery
可能重复:
jQuery ajax错误函数
我试图用我可以从每个ajax调用调用的函数替换"全局"ajax错误处理程序,因为我们的实现中观察到了问题.
$(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
}
}
});
Run Code Online (Sandbox Code Playgroud)
我想将其转换为函数并将其称为:
$.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
}
Run Code Online (Sandbox Code Playgroud)
问题在于我无法将ajax的url调用到错误回调,因为传递的唯一内容是jqXHR,textStatus,errorThrown.在.ajaxError设置中,设置被传递,这是我们从中获取URL的位置.有任何想法吗?
编辑2/3:这是Add_Course函数,供您查看:
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
});
}
}
Run Code Online (Sandbox Code Playgroud)
首先,祝贺实际检查错误.因此,许多人编写的代码永远不会让互联网出现问题.哈.
而不是编辑每个调用$.ajax您可以调用$.ajaxSetup()每个调用使用您的函数作为错误处理程序.错误处理程序签名error(jqXHR, textStatus, errorThrown)可以方便地匹配您的函数,因此$.ajaxSetup({ error: logAjaxError })在进行任何$.ajax调用之前请尝试调用.
| 归档时间: |
|
| 查看次数: |
19028 次 |
| 最近记录: |