2013-04-05 43 views
0

我有两个复选框选择每个会引发ajax请求,以获得服务器的响应。在最后一次请求发生后至少有2秒的间隔时,我只需要调用一次方法。任何想法?这意味着我不想在复选框连续点击少于2秒的间隔时调用方法。我如何取消所做的请求,如果请求之间的时间差小于2秒。请注意,我希望只有在最后一个请求没有被其他请求跟随2秒后才会触发该方法一次。Javascript请求

var timeout; 
clearTimeout(timeout); 
timeout = setTimeout(function() { // call method }, 2000); 
+1

除此之外,你有一些代码吗? – 2013-04-05 07:16:22

+0

var timeout; clearTimeout(timeout); var timeout = setTimeout(function(){ // call method },2000); – sharmila 2013-04-05 07:20:15

+0

请将代码添加到您的问题中,而不是在注释 – 2013-04-05 07:20:52

回答

0

请注意,我婉excecute的方法只有一次取得了最后的请求。

你不显示任何代码,但假设你已经有了一个功能doAjax(),做Ajax请求,你能保证它不叫,直到任意2秒时段的最后一次点击通过两秒钟后使用setTimeout() function做这样的事情:当作为参数传递给setTimeout()函数传递

var timerID; 
document.getElementById("yourCheckboxIdHere").onclick = function() { 
    clearTimeout(timerID); 
    timerID = setTimeout(doAjax, 2000); 
}; 

注意doAjax有后的括号。

如果您需要将参数传递到您的doAjax()功能改变符合setTimeout()到:

timerID = setTimeout(function(){ 
     doAjax(parameters, go, here); 
    }, 2000); 
来自这两个复选框
+0

中,但上述方法每次都会触发doAjax()方法。点击时,我有多个复选框调用doAjax()方法。我希望该方法在最后一次请求没有被其他请求跟随2秒后才被触发一次。 – sharmila 2013-04-05 07:40:00

+0

我所展示的代码对我来说工作正常,有两个复选框:http://jsfiddle.net/nnnnnn/Mb7j5/无论点击哪个复选框,在任何给定的两秒内只有一次调用'doAjax()',他们点击的顺序是什么。 (我在我的答案中假设你能够弄清楚如何将它扩展到两个复选框的工作...)确保'timerID'变量被定义_outside_点击处理程序(不像你添加到你的代码在'clearTimeout()'之前定义的问题)。 – nnnnnn 2013-04-05 07:51:20