即使mvc Ajax.ActionLink调用被取消,也会调用jquery global ajaxError处理程序

时间:2013-12-19 06:42:04

标签: asp.net-mvc asp.net-mvc-3 jquery

我在布局页面中注册了一个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调用已被取消且没有请求。

1 个答案:

答案 0 :(得分:0)

OnBegin帮助器的Ajax.ActionLink方法返回 false 实际上是从jQuery.ajax() {{1}返回 false 功能。

jQuery文档:

  

在beforeSend函数中返回false将取消请求。

取消请求会导致抛出ajax错误并调用您的处理程序。

要解决您的问题,您可以检查函数中的beforeSend参数:

thrownError