一次只能有一个AJAX请求?

时间:2009-11-19 18:16:12

标签: jquery

我想确保一次只有一个AJAX请求(针对用户)。这就是我试过的:

var ajaxFinished = 1;

$('#selector').keyup(function() {

    if (ajaxFinished == 1) {

        ajaxFinished = 0;

        $.get('test.php', { par : "par" }, function(data) {

            // do stuff with data
            ajaxFinished = 1;

        });
    }

});

但问题是AJAX请求现在只执行一次,即使我多次激活该事件。

4 个答案:

答案 0 :(得分:3)

当你$ .get发生错误并且ajaxFinished永远不会被重置为1时可能是吗?

您可能希望使用$ .ajax而不是$ .get。 $ .ajax将让您捕获成功和错误事件。

答案 1 :(得分:3)

我认为科里已经钉牢了。另一种可能性:你引用的代码块是否在我们看不到的另一个函数内?然后它可能是ajaxFinished超出范围 - 纠正我如果我错了,我对JS范围和匿名函数的了解并不完美。在这种情况下,您必须删除“var”或在正文中声明它。

答案 2 :(得分:2)

我猜ajaxFinished应该是一个全局变量。删除var关键字。尝试:

ajaxFinished = 1;

答案 3 :(得分:1)

如果我正在编写该功能,我会将其拆分并调用超时

var autocomplete_timeout;

$('#selector').keyup(function() {

    if(autocomplete)
       clearTimeout(autocomplete_timeout);
    autocomplete_timeout = setTimeout(300, "autocomplete('"+ this.val() +"');");
});

function autocomplete(param1, param2){
        $.get('test.php', { par : "par" }, function(data) {

            // do stuff with data
            ajaxFinished = 1;

        });
}

在用户停止输入

之后300毫秒缓冲ajax调用的行