0

keypress イベントハンドラjsfiddleを持つテキストフィールドがあります。このフィールドに何か入力して「Enter」を 2 回押すと、2 つのリクエストが送信されます。ajaxリクエストの進行中は、すべてのイベントをオフにしたいです。1 つのオプションは、.off()ajax 呼び出しの前に関数を呼び出してから、イベント ハンドラーを再度バインドすることです。他のオプションはありますか?

4

3 に答える 3

2

ajax 呼び出しからのコールバック ハンドラーと、フラグとして使用されるブール値を使用します。「always」コールバックで ajaxLoading ブール値を false に設定することで、現在の ajax 呼び出しがエラーをスローするかどうかに関係なく、他の将来のリクエストを確実に行うことができます。

var ajaxLoading = false;

if(!ajaxloading){
   ajaxloading=true;
   $.ajax({
    url: 'your url',
    type: 'GET',
    dataType: 'JSON'

   })
   .done(function(data) {
    console.log("success");

   })
   .fail(function() {
    console.log("error");
   })
   .always(function() {
    console.log("complete");
        ajaxloading=false;
   });

}
于 2013-10-01T13:32:47.047 に答える
1

次のような2つのブールフラグを使用します。

var is_requesting = false, should_request = false;
function onkeydown() {
    if (is_requesting) {
        should_request = true;
        return;
    }
    is_requesting = true;
    $.ajax({}, function () {
        is_requesting = false;
        if (should_request) {
            onkeydown();
        }
    });
}
于 2013-10-01T13:26:36.173 に答える