我有一个输出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;})
但这似乎都不起作用。我错过了什么?
答案 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”请求不支持 同步操作。注意 同步请求可能是暂时的 锁定浏览器,禁用任何 请求处于活动状态时的操作。