在ajax挂起时阻止双重请求

时间:2013-09-11 20:11:16

标签: ajax jquery

我真的需要了解在挂起时如何阻止请求ajax。让我解释一个例子:

我有一个名为“share”的输入类型,当我写东西并按下输入ajax时,取结果并在mysql中插入。如果我这样按下很长时间的输入按钮就会产生更多的结果,比如我按下了多少次输入即使在php中有控件也是如此。我认为是请求ajax的问题​​因为控制php我确定是对的。非常感谢你。

这是示例代码:

形式

<input type="text" class="share">

的js

$.fn.enterKey = function (fnc) { // function for check when i press enter
    return this.each(function () {
        $(this).keypress(function (ev) {
            var keycode = (ev.keyCode ? ev.keyCode : ev.which);
            if (keycode == '13') {
                fnc.call(this, ev);
            }
        })
    })
}

$('.share').enterKey(function() { // ajax request
    var comment = $(this);
    if (comment.val() != "") {
        $.ajax({
            type: "POST",
            url:  add_comment.urlRemove,
            data: "text=" + comment.val(),
            success: function(html) {
                comment.val('');
            },
            error: function(){
                alert('Error on ajax call');
            }
        }); 
    } 
    else {
        return false;
    }
});

1 个答案:

答案 0 :(得分:1)

您可以设置变量以确定是否已发送请求,如下所示:

var alreadySent = false;

$('.share').enterKey(function() {
    var comment = $(this);
    if (comment.val() != "") {   
        if(!requestSent) {
            // Set variable to true
            alreadySent = true;

            $.ajax({
                type: "POST",
                url:  add_comment.urlRemove,
                data: "text=" + comment.val(),
                success: function(html) {
                    // Set variable to false
                    alreadySent = false;
                    comment.val('');
                },
                error: function(){
                    // Set variable to false
                    alreadySent = false;
                    alert('Error on ajax call');
                }
           }); 
        }
    }
});