我在布局页面中注册了一个jquery全局处理程序来处理整个站点中的常见错误。以下是它在布局页面中的注册方式。
$(document).ajaxError(function (event, jqXHR, ajaxSettings, thrownError) {
if (jqXHR.status == "610") {
window.location.replace(loginUrl);
}
else if (jqXHR.status == "600") { }
else {
alert("An error occurred processing your request");
}
});
我在我的一个视图(cshtml)中有一个Ajax.ActionLink,我将使用 OnBegin 处理程序取消,方法是从处理程序返回false,如下所示
@Ajax.ActionLink("Save List", "_SaveStates",null,
new AjaxOptions { OnSuccess = "onSaveSuccess",
OnBegin = "onSaveBegin",
OnComplete = "onComplete"
},
new {@class="t-button", id="lnkSaveList" })
function onSaveBegin() {
var grid = $('#tlkBulkAddGrid').data('tGrid');
if (grid.total == undefined || grid.total == "" || grid.total < 1) {
alert('List is Empty');
return false; //Return False to cancel ajax call
}
$('.t-status .t-icon').addClass('t-loading');
}
奇怪的是,即使我从 onSaveBegin() 返回false ,也会调用全局 ajaxError 。我不明白为什么应该触发全局错误处理程序,因为ajax调用已被取消且没有请求。
答案 0 :(得分:0)
从OnBegin
帮助器的Ajax.ActionLink
方法返回 false 实际上是从jQuery.ajax() {{1}返回 false 功能。
jQuery文档:
在beforeSend函数中返回false将取消请求。
取消请求会导致抛出ajax错误并调用您的处理程序。
要解决您的问题,您可以检查函数中的beforeSend
参数:
thrownError