Javascript ASP.Net ScriptManager->ServiceReference Ajax调用-我可以捕获开始和结束事件吗?
我的ASP.NET4.0应用程序中本地有一个WCF服务。我的主页上有以下内容: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: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;
}