2010-07-20 27 views
1

我有一个输出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;})

但这似乎没有工作。我错过了什么?

回答

1

如果你在jQuery的是在amibusyjQuery.active其中包含当前活动的AJAX请求的计数,像这样:

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

请记住,在jQuery的1.4.3这成为jQuery.ajax.active

+0

嘿,那整理它!谢谢! – phpno 2010-07-20 19:06:01

+0

@phpno - 欢迎:)并欢迎来到SO! – 2010-07-20 19:06:41

0

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

在jQuery中,请参阅load()函数和成功方法加上各种AJAX您可以使用ajax()进行的活动。

0

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

0

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

asyncBoolean默认值:true

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

+0

*请不要使用这个,它会在AJAX请求运行时无缘无故锁定浏览器,应尽可能避免使用“async:true”。 – 2010-07-20 17:14:12

+0

啊!感谢您的headup :) – 2010-07-21 08:13:30