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 に設定します。クロスドメイン リクエストと dataType: "jsonp" リクエストは、同期操作をサポートしていません。同期リクエストはブラウザを一時的にロックし、リクエストがアクティブな間はすべてのアクションを無効にする場合があることに注意してください。jQuery 1.8 以降、jqXHR ($.Deferred) で async: false を使用することは推奨されなくなりました。完全/成功/エラーのコールバックを使用する必要があります。

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

4

1 に答える 1

5

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

つまり、同期AJAXリクエストを実行する場合、によって返されるオブジェクト(done()fail()など)によって公開される遅延APIを使用するのではなく、代わりにandハンドラーに依存する必要があります。$.ajax()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');
});
于 2012-11-30T09:00:08.160 に答える