2011-10-27 19 views
4

私はhereを読んでいましたが、jqueryの同期ajax呼び出しはタイムアウトしません。jqueryサポートのタイムアウトで同期ajax呼び出しが行われないのはなぜですか?

これは技術的な制限ですか、または著者がサポートしていないと思われるものですか? ajax呼び出しが同期しているときにテーブルの下で実際に何が起こるのですか?

+4

基本的に、同期Ajaxリクエスト中にブラウザがブロックされ、ブラウザがブロックされている間にJavaScriptを実行できません。このため、jQueryはjavascriptで、ブラウザがブロックされている間はjavascriptを実行できないため、jQueryは設定されたタイムアウト後にajaxリクエストを中止できません。これは、同期ajaxの主な欠陥です。 –

+0

@KevinB - それは私が偶然見つけた答えです。私はキーが、ブラウザが同期/非同期を処理するが、タイムアウトは処理しないことだと思う。ブラウザがXHR APIの一部としてタイムアウトしていた場合、これは問題ではない – pepsi

+0

同期型Ajaxから移動できない場合は、サーバー側にタイムアウトを実装して、 x秒より長い場合は、500ヘッダーを返します。 –

答えて

9

ブラウザはXMLHttpRequest APIを使用して同期/非同期要求を処理しますが、組み込みのタイムアウト機能はありません。 JQueryはブラウザのXHR APIの上にJavaScriptで独自のタイムアウトを実装しています。

実行中のスクリプトがすべて実行中のスクリプトをブロックするため、JQueryのタイムアウトは機能しません。理論的には、JSレベルとは対照的に、ブラウザレベルで実装されていれば、同期タイムアウトが可能であるようです。

2

同期AJAX呼び出しは、要求が完了するまでブロックされます。 AJAX呼び出しを後で実行する必要があるため、技術的な理由からタイムアウトを実装することはできません。

AJAX呼び出しが後で実行されると、関数は何らかの理由でAJAX呼び出しの後でコードが実行されなくなるようにブロック機能を実装し、タイムアウト後に再度実行する必要があります。

0

実際、AJAXリクエストの性質に関係するものですが、jQueryではこれを変更できません。

このような場合、サーバー側でタイムアウトを実装する必要があります。

関連する問題