0

jQuery経由でajaxリクエストを送信する関数someFunction()があります。

ユーザーがクリックして満足すると、リクエストが上書きされたように見えます...そして、その理由がわかりません。

var request = $.ajax(customObject);
request.done(doneFunction);
request.fail(failFunction);

doneFunction() & failFunction( )に渡される XHR オブジェクトは、ユーザーが関数を起動するたびに上書きされます。

これは、doneFunction()failFunction()が遅延アニメーションとコールバックを使用して、アニメーションの完了時に (XHR オブジェクトから派生した) html を変更するため、問題になります。

考えや提案はありますか?

  • グローバル変数ではなくローカル変数を使用していることに注意してください...すでにそれについて考えています...
4

2 に答える 2

0

変数を追加して、リクエストがすでに送信されているかどうかを確認し、それが完了するまで別のリクエストを送信しないようにすることができます。このようなもの:

var requestSent = false;

function someFunction() {
    if (!requestSent) {
        requestSent = true;

        $.ajax({
            url: [url],
            type: [type],
            data: [data],
            success: function (xhr) {
                doneFunction(xhr);
                requestSent = false;
            },
            failure: function (xhr) {
                failFunction(xhr);
                requestSent = false;
            }
        });
    }
}
于 2013-09-19T15:59:54.677 に答える
0

簡単な方法の 1 つは、ajax 呼び出しが返されるまで、ボタンを非表示にするか無効にすることです。someFunction()ボタンを無効にして「読み込み中」のスピナー画像を表示し、コールsuccessバックfailureでボタンを有効にして「読み込み中」のスピナーを削除します。

複数のリクエストを許可する場合は、キューを実装し、AJAX 呼び出しを連続して行う必要があります。基本的に、AJAX 関数のキューを保持するオブジェクトを作成します。1 つの要求が返されたら、次の要求を呼び出します。以下にいくつかの例を示します。

于 2013-09-19T20:52:28.933 に答える