Javascript 通过ajax请求一些东西-如何停止其他请求,直到这个请求完成

Javascript 通过ajax请求一些东西-如何停止其他请求,直到这个请求完成,javascript,jquery,Javascript,Jquery,我有一个输出json数据的php脚本。为了测试的目的,我把sleep(2)放在了开头 我有一个html页面,当您单击一个按钮时,它会请求该数据,并执行$('.dataarea').append(data.html) (php脚本返回一个json编码的数组。data.html包含我想放在…此处末尾的html 问题是,如果我点击按钮的速度太快(即在两秒钟内不止一次(由于php脚本中的睡眠(2)),它会再次请求php文件 我怎样才能让它一次只做一个请求 我尝试过这个(向下编辑以显示重要部分): 但这似

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

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

(php脚本返回一个json编码的数组。data.html包含我想放在
…此处
末尾的html

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

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

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

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


但这一切似乎都不起作用。我缺少什么?

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


在jQuery中,请参阅
load()
函数和success方法以及各种AJAX事件,您可以使用
AJAX()

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


在jQuery中,请参阅
load()
函数和成功方法,以及可以使用
AJAX()

点击的各种AJAX事件。如果您在jQuery中,
amibusy
将是
jQuery.active
,其中包含当前活动的AJAX请求计数,如下所示:

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

请记住,在jQuery 1.4.3中,这将变成。

如果您在jQuery中,
amibusy
将是
jQuery.active
,其中包含当前活动AJAX请求的计数,如下所示:

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

请记住,在jQuery 1.4.3中,这变成了。

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

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

您可以使用
async
变量吗?

asyncBoolean默认值:true

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


您可以使用
async
变量吗?

asyncBoolean默认值:true

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


请不要使用此选项,它会在AJAX请求运行时无故锁定浏览器,应尽可能避免使用
async:true
。啊!感谢headup:)请不要使用此选项,它会在AJAX请求运行时无故锁定浏览器,应尽可能避免使用
async:true
。啊!谢谢你的介绍:)