【发布时间】:2012-02-25 13:26:58
【问题描述】:
由于我们在实现中观察到的问题,我正在尝试将“全局”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
}
}
});
我想把它转换成一个函数并像这样调用它:
$.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 函数供您查看:
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
});
}
}
【问题讨论】:
标签: jquery ajax error-handling