Extjs Ajax 自动重连的增强

在 Ajax 操作中,自动重连应该是很常见的操作,比如:网络可能短期会慢,那么增加自动重练则会给用户更好的体验。而Extjs 的 Ajax 有很多配置项,偏偏没有 retryCount 这个 默认自动重练的次数,所以我把这个配置项加进去吧。



由于 Ext Ajax 操作最底层用的都是 Ext.lib.Ajax 所以我直接修改 Ext.lib.Ajax.request ,对 retryCount 进行特殊处理

 

 

 

 

 

直接修改 Ext.lib.Ajax.request:

 

/*
	v1.0(20090529) 直接修改底层lib ajax 实现自动重连
*/
(function(){
	//保存原来的调用代码
	var oldRequest=Ext.lib.Ajax.request;
	
	//新的增强代码
	Ext.lib.Ajax.request = function(method, uri, cb, data, options) {
		//没有配置就运行老代码
		if(!options.retryCount) 
			return oldRequest.call(Ext.lib.Ajax,method, uri, cb, data, options);
		
		//保存原来的失败处理函数
		var oldFailure=cb.failure;
	
		//添加了自动重连的新的处理函数
		cb.failure=function(responseObject){
			options.retryCount--;
			
			if(options.retryCount) {
				//注意:自动重连后tId 变化
				var newTransactionId = oldRequest.call(Ext.lib.Ajax,method, uri, cb, 
data, options);
				//调用重连回调函数
				if(options.retry) {
					options.retry.apply(cb.scope||window, [options.retryCount,
newTransactionId]);
				}
				
			}	
			//重连够了,调用真正的失败函数。
			else if(oldFailure){
				oldFailure.apply(cb.scope||window, [responseObject]);
			}
		}
		
		//增强配置,再运行老代码
		return oldRequest.call(Ext.lib.Ajax,method, uri, cb, data, options);
				
	}
	
})();
 


使用代码:

 

Ext.Ajax.request({
   url: 'foo.jsp',
   timeout:2,
   
   //重连次数
   retryCount:3,
   
   //重连后要注意保存新的 newTransactionId
   retry:function(retryCount,newTransactionId){
   	
   	alert('failture remain retry count :' + retryCount+'\n'
   	+'newTransactionId : '+newTransactionId.tId);
   },
   
   //最终的失败函数
   failure: function(responseObject){
  	alert('failture finally :'+responseObject.statusText);
   },
   headers: {
       'my-header': 'foo'
   },
   params: { foo: 'bar' }
});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值