//伪代码如下function fooClick(){ $('button').prop('disable',true); $.ajax({ ... async:false, //同步 success: function(){ $('button').prop('disable',false); ... }, error:funciton(){ $('button').prop('disable',false); ... } }) }
目的比较简单,点击后button变成不可点击,直到http响应完成,变回可以点击。
问题是: 如上代码,当ajax的async属性为false(即同步)时,短时间内快速连续点击3次button(即在第一个ajax还在pending的时候继续点2下button),会依次触发3次ajax请求,当然这3次请求都是等前一个ajax请求响应完成再发起另一次的
当我把ajax的async属性变成true(异步)时候,同样短时间内快速连续点击3次button,只会触发一次ajax请求。(这样的效果是我期望的)
问题是:为什么同步的情况下,click事情似乎被放进一个堆里面?
相关分类