通过ajax请求一些东西 - 如何停止其他请求,直到完成这一步
我有一个输出json数据的php脚本。为了测试的目的,我已经把睡眠(2)放在首位。通过ajax请求一些东西 - 如何停止其他请求,直到完成这一步
我当你点击一个按钮,请求数据的HTML页面,并执行$('.dataarea').append(data.html)
(PHP脚本返回JSON编码阵列。data.html有我想提出在年底的HTML <div class="dataarea">...HERE</div>
。
麻烦的是,如果我按一下按钮过快(即不止一次两秒(由于睡眠中多(2)在PHP脚本)),它要求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;})
但这似乎没有工作。我错过了什么?
如果你在jQuery的是在amibusy
将jQuery.active
其中包含当前活动的AJAX请求的计数,像这样:
if(jQuery.active > 0) { //or $.active
alert('Request in Progress');
}
请记住,在jQuery的1.4.3这成为jQuery.ajax.active
。
禁用click事件中的按钮,并在请求完成时再次启用它。请注意,请求是异步的(即“发送请求”立即返回),所以您必须注册一个函数,当答案进来时调用。
在jQuery中,请参阅load()
函数和成功方法加上各种AJAX您可以使用ajax()
进行的活动。
我在想你的“请求”逻辑。每当我完成像这样的调用时,它们总是异步的,意味着我关闭了请求,然后当响应出现时,另一个函数处理该请求。在这种情况下,它会在设置回调处理程序之后完成该功能,并在请求实际返回之前将您的amibusy的值重新设置为false。您需要在处理程序中为您的回调函数设置该变量。
你可以使用async
变量吗? http://api.jquery.com/jQuery.ajax/
asyncBoolean默认值:true
缺省情况下,所有的请求被发送 异步(即这是通过默认设置为true )。如果您需要同步 请求,请将此选项设置为false。 跨域请求和数据类型: “jsonp”请求不支持 同步操作。请注意, 同步请求可能会暂时 锁定浏览器,并在请求处于活动状态时禁用任何 操作。
*请不要使用这个,它会在AJAX请求运行时无缘无故锁定浏览器,应尽可能避免使用“async:true”。 – 2010-07-20 17:14:12
啊!感谢您的headup :) – 2010-07-21 08:13:30
嘿,那整理它!谢谢! – phpno 2010-07-20 19:06:01
@phpno - 欢迎:)并欢迎来到SO! – 2010-07-20 19:06:41