教你如何终止JQUERY的$.AJAX请求


Posted in Javascript onFebruary 23, 2016

最近遇到,如果用户频繁点击ajax请求,有两个问题:

1,如果连续点击了5个ajax请求,前4个其实是无效的,趁早结束节省资源。

2,更严重的问题是:最后一个发送的请求,响应未必是最后一个,有可能造成混乱。还需要一个队列来维护发送的请求和响应。

我其实已经设计好了该队列的实现方式,后来发现jQuery直接通过abort方法,这样就不需要那么复杂的实现了,毕竟还有其他事情等着完成。

用jquery发送ajax请求的确是太方便了,$.get、$.post、$.ajax等等,但我们有时候需要中途中止ajax请求。

举个例子,用comet做聊天时,发送一个请求后,服务端通常过几十秒后才会刷新链接、返回数据。假设服务端是30秒刷新一次链接,如果我们在10秒时想要停止这个ajax请求,怎么办呢?

先上代码,后面再解释

var ajaxGet = $.get(“comet_server.php”,{id:1},function(data){
….//一些操作
});
ajaxGet.abort();

上面这段代码其于两个知识点:

1. $.get返回的数据类型是XMLHttpRequest,请参考手册。($.post、$.ajax、$.getJSON、$.getScript也同样)

2. XMLHttpRequest对象有abort()方法

注意:abort()后,ajax请求立即停止,但还是会执行后面的function()。如果想避免执行其中的操作,可以在function()开始位置加判断

var ajaxGet = $.get(“comet_server.php”,{id:1},function(data){
if(data.length == 0) return true;
….//一些操作
});
ajaxGet.abort();

终止ajax请求:

var request = $.get(“ajax.aspx”,{id:1},function(data){
  //do something
});
//终止请求动作.
request.abort();

防止重复请求:

var request;
if(request != null)
  request.abort();
request = $.get(“ajax.aspx”,{id:1},function(){
  //do something
});
ajax & setTimeout实现 secondTry 在等待一秒之后将firstTry的ajax终止:
var firstTry = $.ajax(
 //do something
 );
var secondTry = setTimeout(function(){alert(‘ok');firstTry.abort()},1000);
Javascript 相关文章推荐
javascript 控制弹出窗口
Apr 10 Javascript
jQuery lazyLoad图片延迟加载插件的优化改造方法分享
Aug 13 Javascript
Javascript将JSON日期格式化
Aug 23 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
Feb 16 Javascript
详解Vue 方法与事件处理器
Jun 20 Javascript
深入探究angular2 UI组件之primeNG用法
Jul 26 Javascript
JavaScript实现开关等效果
Sep 08 Javascript
详解vue + vuex + directives实现权限按钮的思路
Oct 24 Javascript
react-router browserHistory刷新页面404问题解决方法
Dec 29 Javascript
vuex的简单使用教程
Feb 02 Javascript
layui实现数据分页功能(ajax异步)
Jul 27 Javascript
vue如何在用户要关闭当前网页时弹出提示的实现
May 31 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
Feb 23 #Javascript
javascript每日必学之多态
Feb 23 #Javascript
javascript每日必学之继承
Feb 23 #Javascript
JS实现的仿QQ空间图片弹出效果代码
Feb 23 #Javascript
理解javascript封装
Feb 23 #Javascript
学习Javascript面向对象编程之封装
Feb 23 #Javascript
javascript每日必学之封装
Feb 23 #Javascript
You might like
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
php实现的返回数据格式化类实例
2014/09/22 PHP
实例:尽可能写友好的Javascript代码
2006/10/09 Javascript
javascript StringBuilder类实现
2008/12/22 Javascript
jquery实现简单的拖拽效果实例兼容所有主流浏览器
2013/06/21 Javascript
JS比较两个时间大小的简单示例代码
2013/12/20 Javascript
jQuery修改CSS伪元素属性的方法
2014/07/30 Javascript
JavaScript生成随机字符串的方法
2015/03/19 Javascript
详解javascript事件冒泡
2016/01/09 Javascript
jQuery滚动新闻实现代码
2016/06/26 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
2016/09/20 Javascript
node.js基于fs模块对系统文件及目录进行读写操作的方法详解
2017/11/10 Javascript
vue 虚拟dom的patch源码分析
2018/03/01 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
JS实现斐波那契数列的五种方式(小结)
2020/09/09 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
[01:01:18]VP vs NIP 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
一些常用的Python爬虫技巧汇总
2016/09/28 Python
Windows下Python2与Python3两个版本共存的方法详解
2017/02/12 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
Django数据库连接丢失问题的解决方法
2018/12/29 Python
使用virtualenv创建Python环境及PyQT5环境配置的方法
2019/09/10 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
浅析PyCharm 的初始设置(知道)
2020/10/12 Python
python中的yield from语法快速学习
2020/11/06 Python
jupyter 添加不同内核的操作
2021/02/06 Python
销售文员岗位职责
2013/11/29 职场文书
宝宝周岁宴答谢词
2014/01/26 职场文书
鼓舞士气的口号
2014/06/16 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
教师党员个人总结
2015/02/10 职场文书
格林童话读书笔记
2015/06/30 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang
Winsows11性能如何? win11性能测评多核竟比Win10差了10%
2021/11/21 数码科技