2012-11-30 19 views
6

スクリプトの読み込みに時間がかかるうちに、Ajaxエラー関数が呼び出されていくつかの問題が発生しています。しかし、私はasync: falseを追加して修正することができました。

例えば:

$.ajax({ 
    type: 'POST', 
    url: REQUEST_URL, 
    async: false, 
    data: { 
     'id': id 
    }, 
    dataType: 'json', 
    success: function(output) { 
     // success 
    }, 
    error: function() { 
     alert('Error, please refresh the page'); 
    } 
}); 

それが言うドキュメント読み:デフォルトでは

は、すべての要求が非同期的に送信されます(すなわち、これはデフォルトでtrueに設定されている を)。同期要求が必要な場合は、このオプションを falseに設定します。クロスドメインリクエストとデータタイプ: "jsonp"リクエストは同期操作をサポートしていません。 同期要求は、ブラウザ を一時的にロックし、要求が の間に動作を無効にすることがあります。 jQuery 1.8以降、jqXHR ($ .Deferred)でasync:falseを使用することは推奨されていません。完全/成功/エラー コールバックを使用する必要があります。

Q)最後の部分はjqXHR($ .Deferred)について何を意味するのでしょうか?これはスクリプトに影響しますか?

答えて

5

スクリプトには影響しません。

これは同期AJAXリクエストを行う場合、一つは$.ajax()(等done()又は例えばfail())によって返されたオブジェクトによって露出deferred APIを使用し、その代わりにcompleteerrorハンドラに依存してはならない、ということを意味します。

つまり、あなたのコードはすでに適切なパターンを使用しています。

// Do not write this code. 
$.ajax({ 
    type: 'POST', 
    url: REQUEST_URL, 
    async: false,   // <-- Synchronous request. 
    data: { 
     'id': id 
    }, 
    dataType: 'json' 
}).done(function(output) { // <-- Use of deferred method. 
    // success 
}).fail(function() {  // <-- There also. 
    alert('Error, please refresh the page'); 
}); 
+0

ありがとう、ちょうど私のコードが将来のjqueryで壊れないようにしたいと思っていた場合、あなたはそれを修正する必要があります –