杀死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++;
		 }
});


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值