.ajaxStart和.ajaxStop因某些奇怪的原因没有解雇

时间:2013-03-15 07:05:57

标签: jquery ajax asp.net-mvc model-view-controller

当发出ajax请求时,我向主体附加一个“正在加载”类,这样我就可以显示进度动画... 出于某种原因,函数ae从未调用过,我看不到警报...

function setLoadingPanel()
{
    var timer;
    var body = $("body");

    alert("Set AJAX HOOKS...");
    $("body").on({
        ajaxStart: function ()
        {
            alert("AJAX START");
            //timer = setTimeout(function () { body.addClass("loading"); }, 50)
        },
        ajaxStop: function ()
        {
            alert("AJAX STOP!!!");
            //$(this).removeClass("loading");
            //clearTimeout(timer);
        }
    });
}

我已经发出警报,试图查看钩子是否被调用但是由于某种原因没有弹出警报。

这是我使用简单的AJAX.ActionLink助手的ajax请求:

@{
    var ajaxDialogoptions = new AjaxOptions()
    {
        HttpMethod = "GET",
        InsertionMode = InsertionMode.Replace,
        UpdateTargetId = "DialogContainer",
        OnComplete = "OpenDialog('DialogContainer');"
    };
}
@Ajax.ActionLink(Model.AddNewItemButtonTitle, Model.AddActionName, Model.AddActionController, Model.AddActionRoutValues, ajaxDialogoptions, new { Class = "btn btn-primary anti-align-rtl" })

这是我的一系列脚本:

            Bundle bundle = new Bundle("~/Scripts/jsRTL");

            bundle.AddFile("~/Scripts/Common/jquery-1.9.1.min.js");
            bundle.AddFile("~/Scripts/Common/jquery-ui-1.10.1.custom.min.js");
            bundle.AddFile("~/Scripts/Common/jquery.unobtrusive-ajax.min.js");
            bundle.AddFile("~/Scripts/Validator/jquery.validate.min.js");
            bundle.AddFile("~/Scripts/Validator/jquery.validate.unobtrusive.min.js");
            bundle.AddFile("~/Scripts/Globalize/globalize.js");
            bundle.AddFile("~/Scripts/Globalize/globalize.culture.en-US.js");
            bundle.AddFile("~/Scripts/Globalize/globalize.culture.he.js");
            bundle.AddFile("~/Scripts/Globalize/globalize.culture.he-IL.js");
            bundle.AddFile("~/Scripts/Bootstrap/bootstrap-rtl.js");
            bundle.AddFile("~/Scripts/Common/Common.js");

2 个答案:

答案 0 :(得分:8)

尝试将ajaxStart-和ajaxStop-Handler添加到这样的文档中:

$(document).ajaxStart(function () {
    alert("AJAX START");
    //timer = setTimeout(function () { body.addClass("loading"); }, 50)
});
$(document).ajaxStop(function () {
    alert("AJAX STOP!!!");
    //$(this).removeClass("loading");
    //clearTimeout(timer);
});

请参阅here

  

但是,从jQuery 1.8开始,.ajaxStart()方法只应附加到文档。

答案 1 :(得分:4)

我注意到你正在使用jQuery 1.9。确保已升级jquery.unobtrusive-ajax.min.js以使其与之兼容,因为ASP.NET MVC 4附带的初始版本并非依赖于.live()不再存在的版本。