XMLHttpRequest实现终止请求和超时
2016-04-15 17:21
567 查看
这里是使用的XMLHttpRequest2中的API,口蹄疫通过XMLHttpRequest对象的 abort( )方法 来取消正在进行的HTTP请求,abort( )方法是在XMLHttpRequest和XMLHttpRequest2中都可用的,调用abort( )方法在这个对象上触发abort事件。
调用abort( )的主要原因是完成像取消或超时请求消耗的是啊进太长或当响应变得无关时的情况
例如:使用XMLHttpRequest为文本输入域请求自动完成推荐,如果用户在服务器的建议到达之前输入了新的字符,这时等待请求就不再有用了,所有应该终止
XMLHttpRequest2中定义了 timeout 属性来指定请求自动终止的毫秒数,也定义了timeout事件用于超时发生时触发,但是到目前位置,浏览器还不支持这些自动超时,
但是我们可以使用setTimeout( )和abort( )方法来实现自己的超时
调用abort( )的主要原因是完成像取消或超时请求消耗的是啊进太长或当响应变得无关时的情况
例如:使用XMLHttpRequest为文本输入域请求自动完成推荐,如果用户在服务器的建议到达之前输入了新的字符,这时等待请求就不再有用了,所有应该终止
XMLHttpRequest2中定义了 timeout 属性来指定请求自动终止的毫秒数,也定义了timeout事件用于超时发生时触发,但是到目前位置,浏览器还不支持这些自动超时,
但是我们可以使用setTimeout( )和abort( )方法来实现自己的超时
/* 发起HTTP GET请求获取指定URL的内容 如果响应成功到达,则传入responseText给回调函数 如果响应在timeout时间内没有到达,则中止请求 浏览器可能会在abort()后出啊发readystatechange 如果部分请求结果到达,甚至可能设置status属性 所有需要设置一个标记,当部分且超时的响应到达时不会调用回调函数 如果使用load(当请求完成时触发)事件就没有这个风险 */ function(url,timeout,callback){ var request = new XMLHttpRequest(); var time = false;//是否超时 var timer = setTimeout(function(){ timeout = true; request.abort();//请求中止 },timeout); request.open("GET",url); request.onreadystatechange = function(){ if(request.readyState !==4) continue;//忽略未完成的请求 if(timeout) return;//忽略中止请求 clearTimeout(timer);//取消等待的超时 if(request.status === 200) callback(request.responseText); } request.send(null); }
相关文章推荐
- Iptables防火墙使用
- 结合Wireshark捕获分组深入理解TCP/IP协议栈之HTTP协议
- ajax原理及xmlhttpRequest
- smokeping对网络进行监控
- 可视化理解卷积神经网络-ECCV 2014
- MFC检测网络连接和ping IP地址
- jQuery ajax 请求HttpServlet返回[HTTP/1.1 405 Method not allowed]
- okHttp
- 计算机网络常见面试题
- Android下OkHttp请求自定义HTTPS证书接口设置
- 计算机网络系统的五层体系结构
- 为你的android App实现自签名的ssl证书(https)
- 性能调优之网络篇 - iperf
- ThreadingTCPServer相关源码和RequestHandler相关源码
- 获取网页图片链接(http:/)
- the road to TCPIP(1)--TCPIP详解--数据链路层
- stm32f103zet6+enc28j60上移植lwip,建立TCP客户端通信
- Winsock协议配置问题导致网络连接出问题
- VC6.0 OCX模拟http/post上传文本文件
- Httplib模块使用