杀死ajax请求

前端之家收集整理的这篇文章主要介绍了杀死ajax请求前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

做web开发,使用jquery,有一个功能要求根据用户选择使用ajax请求不同内容放入同一个div内,实现起来比较简单:根据用户的选择设置不同url就行了。但是遇到了问题:用户连续请求了两次不同内容,有可能当第二次请求响应完毕后第一次请求才响应,这样虽然用户进行了第二次请求,收到的数据却被第一次请求收到的数据覆盖了(有点像多线程同步问题)。要求最后显示用户最后一次请求的结果,怎么办呢?

方法一:设置asycn属性为false,进行同步请求。用户发了一次请求,等待浏览器获取结果,期间浏览器进入“假死”状态,直到得到结果或者timeout。如果这样,使用ajax就没有意义了。对于有些手速快的用户,在浏览器锁定之前发出了n多请求,“假死”就变成“真死”了。

方法二:一次请求发出后,屏蔽掉发出ajax请求的功能,直到第一次请求响应完毕。实现起来有些麻烦,不过浏览器不会锁住了。

方法三:在发出下一次ajax请求之前,取消之前未完成的ajax请求。

感觉方法三比较接近需求了,怎样实现呢?jquery有没有提供像杀死一个线程一样杀死ajax请求的方法呢?查看jquery API参考文档后没有结果,后来在http://bigc.at/jquery-ajax-abort.orz看到 $.ajax() 返回一个 xmlHttpRequest 对象,调用该对象的 abort() 方法可以结束ajax请求。

接下来有思路了,把之前发出的ajax请求返回的xmlHttpRequest对象放到数组中,每次发出ajax请求时,在beforesend的回调函数中取出数组中所有对象并abort()掉,这样保证了最后一次请求过程中只有自己一个请求。

var xhr=new Array();
var i=0;
var j=0;
xhr[i]=$.ajax({ 
beforeSend: function(){
		 if(i>0){
			 for(j;j<i;j++){
				 xhr[j].abort();
				 }
			 }
		i++;
		 }
});
原文链接:https://www.f2er.com/ajax/165951.html

猜你在找的Ajax相关文章