0

我有一个带有按键事件处理程序jsfiddle的文本字段。当我在此字段中输入内容并按“Enter”两次时,将发送 2 个请求。我想关闭所有事件,而 ajax 请求正在进行中。一种选择是.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 回答
1

您是否有充分的理由不使用 jQuery .off()函数?

如果是这样,那么您可以在发出 ajax 请求之前简单地禁用该控件,并在请求完成后重新启用它。这也将阻止用户认为他/她可以通过在请求期间更改文本值来更改结果。

        //Disable the input        
        $('#myresult').prop('disabled', true);
        $('#myresult').append('<br>'+$(this).val());
        $.ajax({
            type: "POST",
            beforeSend: function() {},
            complete: function() {
                //Re-Enable the input
                $('#myresult').prop('disabled', false);
            },
            url: "/echo/json/",
            data: { delay : 3 },
            success: function(){},
            error: function() {},
            dataType: 'json'
        });
于 2013-10-01T13:45:54.927 回答