1

私は JS フィドルでこれを行いますが、POST エコーャーを動作させることができないため、ここで例を作成します。someApi「バー」を返すふりをしましょう

JS / jQuery

$(function() {
    $('button').click(function(event) {
        getSomeData();
    });
    function getSomeData() {
        $("div").text("Foo = ");
        $.get("someApi", function(i) {
            $("div").append(i);
        });
    };
});

HTML

<div></div>
<button>Click Me</button>

ここにはタイプミスがあるかもしれませんが、オンザフライで例を書いているので無視してください。<button>一度クリックすると、すべてがうまく機能します。AJAX 関数が呼び出され<div>、応答が来ると が追加されます。応答を待ってもう一度クリックすると、<div>で上書きされFoo =てから追加されます。この問題は、ユーザーが入院して複数回クリックし<button>、複数の AJAX リクエストを生成したときに発生します。これにより、「バー」が複数回追加されてしまいます。複数のリクエストを同じ URL に送信しないようにするための JS / jQuery 内の機能はありますか? 私は私が欲しいという意味ではありませんasync = falseシナリオ; これが機能することはわかっていますが、アプリケーションの速度も低下します。また、bar が既に追加されているかどうかを確認する if ループを追加できることもわかっています。私が求めているのは、適切な JS / jQuery.blockMultipleRequest();のようなものです。

4

2 に答える 2

1

そのためのプラグインはないと思います。次のように使用できます.one()

function bindButton() {
    $('button').one('click', function(event) {
        getSomeData();
    });
}

function getSomeData()
    $("div").text("Foo = ");
    $.get("someApi", function(i) {
        $("div").append(i);
        bindButton();
    });
}

$(function() {
    bindButton();
});

関数bindButton()では、イベント ハンドラを で定義しますone()。ボタンがクリックされると、AJAX 呼び出しの応答までイベントが削除され、関数bindButton()が再度呼び出され、イベント ハンドラーが再びバインドされます。

于 2013-02-27T14:56:58.220 に答える
0

jQuery が提供するグローバル AJAX イベント ハンドラーを使用して、要求に応じて処理を行うことができます。

  • .ajaxSend()リクエストが開始されたとき ( 、eventjqXHRおよびsettingsプロパティがハンドラーに送信されるため、評価することで URL 固有のアクションを実行できますsettings.url
  • .ajaxComplete()リクエストが完了したとき。

次に、URL ごとに AJAX 呼び出しを追跡するオブジェクトを使用して、別の要求を送信する前に参照することができます (たとえば、現在アクティブ/保留状態でない場合のみ)。

于 2013-02-28T09:11:21.060 に答える