2

ユーザーが jQuery の $.ajax でコンテンツをロードするためにクリックできるボタンがいくつかあります。すべてのボタンがコンテンツを同じ div タグにロードします。問題は、ユーザーがすばやく複数回クリックすると、正しいコンテンツに到達する前にコンテンツが数回フラッシュする可能性があることです。

これにはどのような回避策がありますか? 私は.netのSyncLock機能に似たものを考えていましたが、javascript/jQuery. 理想的な解決策は、現在キューにあるリクエストをキャンセルして、新しいリクエストを開始することです。

注意すべきことの 1 つは、複数の無関係な ajax リクエストが進行している可能性があるため、すべてのリクエストをクリアすることはできず、この 1 つの div タグに関連するリクエストだけをクリアできないことです。

4

2 に答える 2

6

リクエストのクリア/キャンセルはコストのかかる作業なので、本当に必要でない限り実行しないでください。また、サーバー側で実行を停止することはなく、httprequest を閉じるだけです。

あなたがすべきことは、「ロック」を設定し、それに応じてロックおよびロック解除することです。何かのようなもの:

var working = false;

function startAjax() {
    working = true;
    // do ajax and wait for callback()
}

function callback() {
    working = false;
}

ボタン .click() で、実際の実行前に動作するかどうかを確認してください。

$("#thebutton1, #thebutton2").click(function() {
    if(working) {
        alert("Im in the middle of something");
    } else {
        // execute...
    }
});
于 2010-01-28T01:18:24.993 に答える
0

あなたができることは、出力を同じdivに送信するすべてのボタンのクリックイベントでボタンを無効にすることです。次に、AJAX コールバックで、応答を処理したら、それらをすべて再度有効にできます。

于 2010-01-28T01:19:32.690 に答える