私の webapp には、コード ビハインドから生成され、リピーター コントロールにバインドされたリンクのリストがあります。リンクをクリックすると、ポップアップ ウィンドウが開き、いくつかのデータが表示されるとともに、WCF サービスへの非同期呼び出しが (JavaScript プロキシ経由で) 行われます。このサービスは、応答に時間がかかる可能性がある別のサード パーティの Web サービスを呼び出します。私はIE6で作業しています。これは避けられない要件です。
ここで、ユーザーが呼び出しの完了を待たずにポップアップ ウィンドウを閉じた場合、onunload でこのサービスを中止します。問題は、ユーザーが直後にリピーターから別のリンクをクリックすると、新しいポップアップウィンドウが開きますが、前の非同期呼び出しが完了するまでページをロードしない (提供された URL に移動しない) ことです (私はこれを確認しました)。フィドラー経由)。興味深いことに、これは同じドメイン内のリンクに対してのみ発生します。ポパスの 1 つのリンクをたとえば www.google.com に変更すると、ウィンドウが開き、意図したとおりの正しい URL に移動します。ただし、自分のドメイン内のリンクを含むポップアップの場合、未完了のリクエストを含むポップアップ ウィンドウが閉じられた直後に開かれ、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-call-jquery aborting-an-asp-net-web-service-asynchronous-call canceling-ajax-web-service-電話
誰もこれに直面しましたか?それは私を夢中にさせます!どんな助けでも大歓迎です。