2009-11-19 109 views
0

我想确保一次只有一个AJAX请求(对于一个用户)。这是我试过的:一次只有一个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请求现在只执行一次,即使我多次激活事件。

回答

3

我认为科里已钉牢。另一种可能性:可能是你引用的代码块在另一个我们没有看到的函数内?那么它可能是ajaxFinished超出了范围 - 纠正我,如果我错了,我对JS范围和匿名函数的知识并不完美。在这种情况下,您将不得不删除“var”或在主体中声明它。

+0

是的,就是这样,它在一个对象方法中,所以我不得不使用这个关键字。 – 2009-11-19 19:28:02

3

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

您可能想要使用$ .ajax而不是$ .get。 $ .ajax将让你捕捉成功和错误事件。

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; 

     }); 
} 

东西缓冲Ajax调用,直到300毫秒的用户已经停止打字

2

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

ajaxFinished = 1;