jQuery-停止ajax请求
jQuery - Stop ajax requests
(我真的不知道如何命名,可以随意建议编辑)
考虑以下示例html:
<div class="grid">
<div class="item"><span class="icon"></span></div>
<div class="item"><span class="icon"></span></div>
<div class="item"><span class="icon"></span></div>
<div class="item"><span class="icon"></span></div>
<div class="item"><span class="icon"></span></div>
</div>
每个.icon
都附有一些jQuery:
<script type="text/javascript">
jQuery('.icon').click(function(){
runAjaxStuff();
displayNewContent();
})
</script>
简而言之,每当用户单击.icon
时,相应的父.item
将执行AJAX请求,并通过在页面上显示额外的.item
内容来完成。
在这种情况下,如果用户连续快速地单击每个.item
,则来自前一次单击的AJAX请求可能仍在等待响应。当然,新内容也尚未显示;然而,在几秒钟后,所有的请求都有机会完成,用户就会被一次显示的大量新内容所淹没。
我所追求的是一种方法,如果单击了.icon
,则可以简单地停止执行任何以前的click
绑定,从而最终只完成最近的一次单击。
我知道我可以让我的AJAX调用同步,但我希望有一个更好的方法,不会占用用户的浏览器。我的jQuery已经足够好了,但这比我习惯的要深入一些。
你有两个选择
您可以取消以前打开的Ajax调用
var xhr = null;
jQuery('.icon').click(function () {
if (xhr && && xhr.readystate != 4) {
xhr.abort();
}
runAjaxStuff();
displayNewContent();
});
在ajax调用中,您会将调用存储到
xhr = $.ajax({
url: 'ajax/progress.ftl',
success: function(data) {
//do something
}
});
或
你可以设置一个"活动"标志,直到最后一个完成才打电话
var isActive = false;
jQuery('.icon').click(function () {
if (isActive) {
return;
}
isActive = true;
runAjaxStuff();
displayNewContent();
});
以及在成功/错误/完成功能中
isActive = false;
你可能想给用户一些通知,告诉他们这个电话是活动的,或者最后一个电话被取消了,这样他们就知道发生了什么。给他们一个好的用户体验,这样他们就不会随意点击。
首先必须解除click
:的绑定
<script type="text/javascript">
jQuery('.icon').click(function(){
$('.icon').unbind('click'); // unbind click
runAjaxStuff();
displayNewContent();
})
</script>
然后在具有$.ajax
方法的complete
事件中再次绑定:
complete: function() {
$('.icon').bind('click'); // will fire either on success or error
}
相关文章:
- ajax请求的顺序总是不同的
- 从ajax请求中获取javascript对象
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- JavaScript代码未正确检查ajax请求
- node.js请求数据事件未在CORS ajax调用中触发
- jQuery Ajax GET请求工作不正常
- "日期“;AJAX请求返回的类型值未定义
- Django - 响应请求 AJAX
- 使用 jQuery 的 CORS 请求 - $.ajax()
- 如果无线电值为 ==1,则请求 ajax
- 如何处理对循环中发出的多个异步请求(AJAX 调用)的响应
- POST请求ajax jquery错误
- CasperJS don'我没有请求AJAX
- 使用这种Facebook风格的Lightbox-请求AJAX-在一个页面上覆盖多个按钮
- 400错误请求ajax post请求
- 如何在开始发送请求ajax之前延迟3秒
- 与jQuery同时请求AJAX
- 使用POST请求AJAX发送json对象