Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ASP.Net ScriptManager->ServiceReference Ajax调用-我可以捕获开始和结束事件吗?_Javascript_Asp.net_Jquery - Fatal编程技术网

Javascript ASP.Net ScriptManager->ServiceReference Ajax调用-我可以捕获开始和结束事件吗?

Javascript ASP.Net ScriptManager->ServiceReference Ajax调用-我可以捕获开始和结束事件吗?,javascript,asp.net,jquery,Javascript,Asp.net,Jquery,我的ASP.NET4.0应用程序中本地有一个WCF服务。我的主页上有以下内容: <asp:ScriptManager runat="server"> <Services> <asp:ServiceReference Path="~/Services/AJAXDataService.svc" /> </Services> </asp:ScriptManager> 在其他大约5次ajax调用之后,在Docu

我的ASP.NET4.0应用程序中本地有一个WCF服务。我的主页上有以下内容:

<asp:ScriptManager runat="server">
    <Services>
        <asp:ServiceReference Path="~/Services/AJAXDataService.svc" />
    </Services>
</asp:ScriptManager>
在其他大约5次ajax调用之后,在DocumentReady事件中会发生这种情况。如果我不将其放在ajaxStop事件中,它会工作,但取决于数据库和网络延迟,它可能不会工作,因为GetComplaintDetails需要从以前的每个调用返回的内容

我找到了ajaxStop方法,并认为它正是我所需要的。但是很明显,Microsoft/ScriptManager调用当然不会经过jQuery,因此该函数毫无意义


问:在使用ScriptManager引用时,是否有方法截获之前每个调用的being/end、start/stop事件?我宁愿这样做,也不愿创建冗长冗长的jQuery调用。

好吧,进一步研究,我找到了一个不错的解决方法。它使用ASP.Net客户端框架Sys使其工作

我创建了一个全局变量:

var _ajaxCounter = 0;
我将以下代码放在全局/母版页文档就绪方法中

if (Sys.Net.WebRequestManager != undefined) {
    Sys.Net.WebRequestManager.add_invokingRequest(WRMInvoke);
    Sys.Net.WebRequestManager.add_completedRequest(WRMCompleted);
} // if we have the Sys.Net namespace
然后在每个页面上加载的.js文件中,我有两种方法:

function WRMInvoke(sender, args) { _ajaxCounter++; }

function WRMCompleted(sender, args) {
    _ajaxCounter--;

    if ((_ajaxCounter == 0) && (typeof (SomeFinalMethod) != "undefined")) {
        Status_Saving(false);
        Status_Working(false);

        SomeFinalMethod();
    }
}
因此,现在在一个页面上,我需要确保在所有其他事情之后发生一些事情,我只需要定义一个SomeFinalMethod方法,如下所示:

function SomeFinalMethod () {
    var passed = $("#hdnComplaintID").val();

    if (passed != "") {
        var service = new BOR.AJAXDataService();
        service.GetComplaintDetails(passed, FillComplaint, DefaultFailure, null);
    }

    SomeFinalMethod = undefined;
}
注意SomeFinalMethod的最后一行,它会自动清除。在某些情况下,这是不必要的。但是,在我的页面上,用户可以做一些事情,可能会触发其他ajax调用,最后一个调用会再次调用此方法并创建一个循环

为了便于参考,请查看本文

希望它能帮助其他人

function SomeFinalMethod () {
    var passed = $("#hdnComplaintID").val();

    if (passed != "") {
        var service = new BOR.AJAXDataService();
        service.GetComplaintDetails(passed, FillComplaint, DefaultFailure, null);
    }

    SomeFinalMethod = undefined;
}