在我的web應用程序中,我有一個從代碼隱藏生成並綁定到中繼控件的鏈接列表。點擊一個鏈接將打開一個彈出窗口,其中顯示一些數據,並通過一個JavaScript代理進行對WCF服務的異步調用。該服務又會調用另一個可能需要很長時間才能響應的第三方Web服務。我正在使用IE6,這是一個不可避免的要求。中止異步Web服務調用並重定向到另一個URL(ASP.NET Ajax)
現在,如果用戶決定不等待呼叫完成並關閉彈出窗口,則在onunload上放棄此服務。問題是,如果用戶立即從轉發器中單擊另一個鏈接,新的彈出窗口將打開,但不會加載頁面(不會轉到提供的URL),直到上一個異步調用完成(我已驗證了此操作通過提琴手)。有趣的是,這隻發生在同一個域內的鏈接上。如果我將某個popus的鏈接更改爲www.google.com,則該窗口會打開並按照預期轉到正確的網址。但是,對於在我自己的域中有彈出窗口的彈出窗口,在關閉具有未完成的請求的彈出窗口之後立即打開它,它會在加載該URL之前等待前一個請求完成。
我已經驗證了放棄回調的正確方法,並且中止會正確觸發。我也知道我只能放棄我的客戶端電話,而不是服務器端電話,我不關心它。我唯一的要求是瀏覽器加載下一個鏈接,而不管以前的異步響應。
//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-call
任何人之前遇到過嗎?它讓我瘋狂!任何幫助將不勝感激。
當你說後面的彈出窗口「等待」上一個請求完成時,你的意思是瀏覽器掛起了嗎? IE可以在瀏覽器Chrome瀏覽器與「等待」(拖動窗口,關閉它等)之間進行交互嗎? – 2009-07-21 01:54:45