2011-09-22 10 views
5

XmlHttpRequestを使用して非同期にWebサービスを呼び出すJavaScript関数を記述しました。私は、この関数がページがレンダリングされる前に作業を終了させるように求められました。同期XmlHttpRequestを中止することはできますか?

私はAJAXリクエストを同期させることができたと思っていましたが、これはページのハングアップを長くしたくありません - 応答が受信されなかった場合、例えば1秒後にリクエストを中止したいと思います。

同期XmlHttpRequestを中止することはできますか?

+0

質問は「私は同期のXMLHttpRequestのためのクライアントスクリプトのタイムアウトを設定することができます」と聞こえますか? –

答えて

4

あなたがすることはできません。

http://www.hunlock.com/blogs/Snippets:_Synchronous_AJAXサイス: 「同期AJAX(本当にSJAX - 同期JavascriptとXML)は、結果がサーバから取得されるまでのjavascriptはあなたのプログラムの処理を停止することを意味し、モーダルでありますブラウザは、アラートボックスやプロンプトボックスのように、ユーザからの入力を待つのではなく、リモートサーバからの入力を待ちます。

ブラウザが同期要求を実行すると、応答が得られるまで待機します。

2

まず、同期AJAX呼び出しはJavaScriptブラウザエンジン全体(あなたが気付いている)をブロックしているので悪いです。

単純にコールを非同期的に実行し、結果が1秒後に到着した後であれば、結果を破棄するだけでは不十分ですか?あなたが本当に(jQueryの便宜のために、必須ではありません)あなたはまだsetTimeout()を使用することができ、結果を待ちたい場合:

var result; 
var xhr = $.ajax('/url', function(response) { 
    result = response; 
}); 
setTimeout(function() { 
    if(result) { 
    //AJAX call done within a second, proceed with rendering 
    } else { 
    //One second passed, no result yet, discard it and move on 
    xhr.abort(); 
    } 
}, 1000); 

このアプローチではまだあなたが待つ必要はありませんが、あなたは、ブラウザをブロックしていませんAJAX呼び出し。

+0

「同期AJAX呼び出しは悪です」 - JavaScriptブラウザエンジン全体をブロックする必要がある場合があるため –

1

XMLHttpRequest支援abort方法は、あなたはここでそれについての詳細を取得することができます:http://www.w3.org/TR/XMLHttpRequest/#the-abort-method

しかし、あなたはそれをサポートしてbrowserы何をチェックする必要があります。たとえば、Windows Internet Explorer 7以上では、abortが導入されました。

send()メソッドのXMLHttpRequestオブジェクトを呼び出す前後に、進行中の非同期操作を中断するn秒間の遅延のタイマーを設定できます。

0

IEでは可能です。タイムアウトプロパティを使用します。

以下のコードは私のために働いた

xmlhttp.open("method","url",false); 
xmlhttp.timeout="time in ms"; 
xmlhttp.ontimeout=function(){}; 
xmlhttp.send(); 
関連する問題