文档章节

如何终止正在发送的ajax请求

 清天君
发布于 2017/02/15 11:39
字数 563
阅读 55
收藏 0
点赞 0
评论 0

目前在用redis的订阅功能,做一个web版的及时聊天程序,因为是ajax长连接实现的及时消息,所以肯定会遇到timeout的问题,不管是socket还是php的最大执行时间都是会遇到的。

最简单的解决办法就是将系统的时间参数都是设置为不限制。但是一个老程序员了,不想用这么原始的方法解决问题,也不愿意去修改服务器的配置。所以想到了每隔30秒自动断开再重新请求的原理。虽然有些轮询的味道,但是依然是长连接的及时没有30秒的延迟。

自动断开请求,首先就想到了ajax有没有能够取消请求的方法,百度了,确实有,jquery的ajax封装也可以取消请求。而且有两种方式,一个是$.ajax的timeout,另一个就是XMLHttpRequest对象的abort()方法。

我自己的递归代码:

	function sub(){
		$.ajax({
		  type:'POST',
		  url:'sub.php',
		  data:'',
		  timeout:30000,
		  success:function(data){
			if(data!=""){//如果有数据发布,就会插入到div层当中
				$("#show").append(data+"<br />");
			}
			$("textarea").val("");//清空textarea里面的值
			sub();//重新调用自己,重新去订阅redis服务器(无限循环的)
		  },
		  error:function(){
			sub();//重新调用自己,重新去订阅redis服务器(无限循环的)  
		  }
		});
	}	
	sub();//第一次调用订阅函数

输入图片说明

引用代码说明:

jquery的ajax方法有自己的超时时间设置参数:

$.ajax({type:'POST',
    url:'b.php',
    data:'',
    timeout:5000,
    success:function(){
        
    }
})

同时

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

也可以自己手动去调用abort方法:

<script src = "jquery-1.4.4.js"></script>
<script>
var xhr = $.ajax({type:'POST',
    url:'b.php',
    data:'',
    success:function(){
        alert('ok');
    }
})
alert(xhr);

console.log(xhr);
</script>
<button id="song">abort</button>
<script>
$(function(){
    $("#song").click(function(){
        alert('click');
        xhr.abort();
    })
})
</script>

对于原生的xhr:

xmlHttp.open("POST","theUrl",true);
xmlHttp.onreadystatechange=function(){
    ...//得到响应之后的操作
}
xmlHttp.send();
//设置8秒钟后检查xmlHttp对象所发送的数据是否得到响应.
setTimeout("CheckRequest()","8000");

function CheckRequest(){
   //为4时代表请求完成了    
    if(xmlHttp.readyState!=4){
        alert('响应超时');
        //关闭请求
        xmlHttp.close();
    }
}

© 著作权归作者所有

共有 人打赏支持
粉丝 0
博文 22
码字总数 5093
作品 0
成都
再也不学AJAX了!(二)使用AJAX

在上一篇文章中我们知道,AJAX是一系列技术的统称。在本篇中我们将更进一步,详细解释如何使用Ajax技术在项目中获取数据。而为了解释清楚,我们首先要搞清楚我们是从哪里获取数据的,其次我们...

LiBin
2017/12/01
0
0
jQuery使用abort方法中止ajax请求

有一个很实用的插件:Autocomplete,即可以实现像搜索引擎一样的关键字提示,提示的内容是用ajax请求后台的内容,这个插件有一个功能,是当用户在输入框按键比较快时,会自动终止之前发出的a...

WolfX
2016/02/20
51
0
JQuery.Ajax之错误调试帮助信息

下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址。 type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 ...

Reborn-D
2015/12/29
182
0
JQuery.Ajax之错误调试帮助信息

下面是Jquery中AJAX参数详细列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址。 type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 ...

赵小宾
2015/06/04
0
0
用ajax异步获取数据或校验的方法

贴个例子: $.ajax({ url : url, type : "POST", data : { id : $this.attr("data-id") }, dataType : "json", success : function(data) { if (data.result == "Y") { alert("终止成功!", ......

帅的不像男的
2016/06/14
179
0
超易用的浏览器请求框架--catta

catta catta 是一个轻量级的 Javascript 浏览器请求框架,支持 Fetch,AJAX,JSONP,甚至支持自定义的请求方式。 使用非常非常非常简单 支持自动检测浏览器来选择请求方式 统一各种请求方式的...

逝者的梦
2017/01/12
257
0
HTTP请求状态及jQuery AJAX请求异常处理

上一周调优一个项目的Js部分,其中一个严重的问题就是在页面初始化数据时,没有对异常进行处理, 导致Loading一直在等待中,无提示无处理。在用户体验上很不好,即使网络条件无法保证,在出错...

临江仙卜算子
06/22
0
0
构建 Web 应用之 Service Worker 初探

这次体验一种新的博客风格,我们长话短说,针针见“血”。 备马 在深入 Service Worker 之前,我们需要快速回顾如下基础。 诞生之初,JavaScript 是单线程的。 进程有私有的虚拟地址空间、代...

韩亦乐
2017/09/26
0
0
jQuery文档: AJAX

jQuery.ajax(url,[settings]) 概述 通过HTTP请求加载远程数据. jQuery底层AJAX实现(一般不使用此函数,一般使用$.get,$.post). 如果要处理$.ajax()得到的数据,则需要使用回调函数. 回调函数 ...

fzyz_abc
2016/09/10
9
0
AJAX基础之JavaScript基础与增强(二)

一,Ajax究竟是个什么东西 用来描述一组技术,它使浏览器可以为用户提供更为自然的浏览体验。 简单一句话 不刷新页面与服务器通讯的技术 在Ajax之前,Web站点强制用户进入提交/等待/重新显示...

architect刘源源
05/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

CentOS “Destination Host Unreachable”问题解决办法

挑战极速安装CentOS时遇到局域网主机不能通信的情况: [root@zjd network-scripts]# ping 8.8.8.8PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.64 bytes from 8.8.8.8: icmp_seq=1 ttl=......

wffger
8分钟前
0
0
CentoOS6.6安装netcat

CentOS下安装netcat 使用zookeeper过程中,需要监控集群状态。在使用四字命令时(echo conf | nc localhost 2181),报出如下错误:-bash: netcat: command not found。 我的系统是CentOS 6....

ghou-靠墙哭
19分钟前
0
0
es6之解构赋值巧用

ES6 允许按照一定模式,从数组、对象等中提取值,对变量进行赋值,这被称为解构赋值。 如何进行解构赋值我这里就不赘述,本篇文章主要是将解构赋值的巧妙使用之处。 1、交互变量的值 常用交互...

秋季长青
24分钟前
0
0
Elasitcsearch High Level Rest Client学习笔记(三)批量api

Bulk Request BulkRequest可以在一起从请求执行批量添加、更新和删除,至少需要添加一个操作 BulkRequest request = new BulkRequest(); //创建BulkRequestrequest.add(new IndexRequest("...

木子SMZ
28分钟前
0
0
mybatis-dynamic sql

OGNL expressions if 判断是否存在值 <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{tit......

writeademo
35分钟前
0
0
社交系统ThinkSNS+ V1.8.3更新播报

     研发发布版本号:1.8.3   本次版本于2018年7月16日发布   本次发布类型:新增功能、细节调整与优化   社交系统ThinkSNSPlus更新体验:请于官网下载/安装最新版或联系QQ35159...

ThinkSNS账号
38分钟前
0
0
教育思考:选择编程是一场父母和孩子的和解[图]

教育思考:选择编程是一场父母和孩子的和解[图]: 之前有个很热的段子是这样讲的:深夜十点的时候,某小区一女子大声喊叫“什么关系?啊?!到底什么关系?你说!”最后发现原来是一位妈妈陪...

原创小博客
39分钟前
0
0
X64汇编之指令格式解析

最近由于项目组内要做特征码搜索的东西,便于去Hook一些未导出函数,你懂得...于是就闲着学习了一下x86/x64的汇编指令格式。x86的汇编指令格式请参照http://bbs.pediy.com/showthread.php?t...

simpower
42分钟前
0
0
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html 基本数据类型 i8,i16,i32,i64,i128 u8,u16,u32,u64,u128 f32,f64 char bool:true...

捍卫机密
45分钟前
0
0
JS中严格模式和非严格模式

1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通...

AndyZhouX
45分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部