在我的 web 应用程序中,我有一个从代码隐藏生成并绑定到转发器控件的链接列表。单击链接会打开一个弹出窗口,在该窗口中,除了显示一些数据外,还会对 WCF 服务进行异步调用(通过 javascript 代理)。该服务反过来调用另一个可能需要很长时间才能响应的第三方 Web 服务。我正在使用 IE6,这是一个不可避免的要求。
现在,如果用户决定不等待调用完成并关闭弹出窗口,我会在 onunload 时中止此服务。问题是,如果用户在之后立即单击转发器中的另一个链接,新的弹出窗口将打开但不会加载页面(不转到提供的 URL),直到上一个异步调用完成(我已经验证了这一点通过提琴手)。有趣的是,这只发生在同一域内的链接上。如果我将其中一个 popus 的链接更改为 www.google.com,则窗口将打开并按预期转到正确的 url。但是,对于在我自己的域中包含链接的弹出窗口,在关闭带有未完成请求的弹出窗口后立即打开,它会等到前一个请求完成后再加载 url。
我已经验证了中止回调的正确方法,并且 abort 确实会正确触发。我也知道我只能中止我的客户端调用,而不是服务器端调用,我不在乎。我唯一的要求是浏览器加载下一个链接,而不考虑之前的异步响应。
//Method to Call Service:
function GetData(Id) {
//call the service
Sys.Net.WebRequestManager.add_invokingRequest(On_InvokingRequest);
var service = new WrapperService();
service.GetData(Id, handleSuccess, handleError, null);
Sys.Net.WebRequestManager.remove_invokingRequest(On_InvokingRequest);
}
//method to get the current requests abort executor
function On_InvokingRequest(executor, eventArgs) {
var currentRequest = eventArgs.get_webRequest();
abortExecutor = currentRequest.get_executor();
}
//abort service on unload
function unload() {
if (abortExecutor != null) {
abortExecutor.abort();
}
}
背景的有用/类似链接:
browser-waits-for-ajax-call-to-complete-even-after-abort-has-been-called-jquery aborting-an-asp-net-web-service-asynchronous-call canceling-ajax-web-service-称呼
有人遇到过这个吗?它让我发疯!任何帮助将不胜感激。