通过ajax请求某些内容 - 如何在完成此操作之前停止其他请求

时间:2010-07-20 16:34:55

标签: javascript jquery

我有一个输出json数据的php脚本。为了测试的目的,我把睡眠(2)放在了开始。

我有一个html页面,当您点击按钮时会请求该数据,$('.dataarea').append(data.html)

(php脚本返回一个json编码数组.data.html包含我想放在<div class="dataarea">...HERE</div>末尾的html。

麻烦的是,如果我点击按钮的速度太快(即两秒内不止一次(由于php脚本中的睡眠(2)),它会再次请求php文件。

我怎样才能让它一次只做一个请求?

我试过这个(编辑下来显示重要部分):

amibusy=false;

$('#next').click('get_next');

function get_next() {

    if (amibusy) {
    alert('requesting already');

}
else {

    amibusy=true;
    // do the request, then do the append()
    amibusy=false;

}


}

但这似乎不起作用。我甚至尝试用set_busy()和set_not_busy()替换amibusy = true | false。 (并使函数am_i_busy(){return amibusy;})

但这似乎都不起作用。我错过了什么?

4 个答案:

答案 0 :(得分:1)

如果你在jQuery中,amibusy将是jQuery.active,其中包含当前有效的AJAX请求数,如下所示:

if(jQuery.active > 0) { //or $.active
  alert('Request in Progress');
}

请记住,在jQuery 1.4.3中,这变为jQuery.ajax.active

答案 1 :(得分:0)

禁用click事件中的按钮,并在请求完成后再次启用它。请注意,请求是异步的(即“发送请求”立即返回),因此您必须注册在答案进入时调用的函数。

在jQuery中,请参阅load()函数和成功方法以及可以使用ajax()进行的各种AJAX事件。

答案 2 :(得分:0)

我想知道你的“请求”逻辑。每当我完成这样的调用时,他们总是异步,这意味着我会关闭请求,然后当响应到来时,另一个函数处理它。在这种情况下,它会在设置回调处理程序之后完成遍历该函数,并在请求实际返回之前将amibusy的值重新设置为false。您需要在回调函数的处理程序中设置该变量。

答案 3 :(得分:0)

您可以使用async变量吗? http://api.jquery.com/jQuery.ajax/

  

asyncBoolean默认值:true

     

默认情况下,发送所有请求   异步(即设置为true)   默认情况下)。如果你需要同步   请求,将此选项设置为false。   跨域请求和dataType:   “jsonp”请求不支持   同步操作。注意   同步请求可能是暂时的   锁定浏览器,禁用任何   请求处于活动状态时的操作。