0
$(".delete").click(
    function()  {
        var thesender = this;
        $(thesender).text("Del...");
        $.getJSON("ajax.php", {},
            function(data) {
                if (data["result"])
                    $(thesender).remove(); // variable defined outside
                else
                    alert('Error!');
            }
        );

        return false;
    }
);

ajax コールバックが呼び出される前にユーザーが別の「.delete」をクリックすると、問題が発生する可能性がありますか?

4

3 に答える 3

2

同じことを行うと同時に、別の ajax リクエストを起動します。それが問題を引き起こすかどうかは、サーバー側に依存します。

通常、何らかのIDまたはキーを削除しています...このコードの後半で削除すると思いますが、今のところ、別の削除を発行して呼び出しajax.phpます...これの結果は完全にそのPHPに依存しますページ。

そのajax リクエストが終了すると、そのajax リクエストに対してコールバックが発生し、この点で各リクエストは独立しているため、各コールバックは個別に処理されます。 現在のクロージャ内にあるため、リクエストごとに一意であり、それぞれのコールバックです。thesender

于 2010-04-18T16:48:43.243 に答える
1

ハンドラーが呼び出されるたびclickに、個別のクロージャーが作成されるため、各 AJAX コールバックは正しい変数への参照を持ちます。

したがって、心配する必要はありません。(サーバーがリクエストを処理できると仮定して)

于 2010-04-18T16:52:48.117 に答える
1

別のイベントが発生します。イベントを 1 回だけ発生させたい場合は、クリックではなく1 つを使用できます。または、AJAX 要求が進行中かどうかを追跡することもできます。たとえば、次のようにデータを使用します。

$('.delete').click(function () {
  if ($(this).data('inProgress')) {
    // Request in progress; cancel?
    return;
  } else {
    $(this).data('inProgress', true);
  };
});

グローバル変数を使用したり、クラスを追加したりして、同じことを達成することもできます。

于 2010-04-18T16:52:50.533 に答える