浏览 3565 次
锁定老帖子 主题:Extjs Ajax 自动重连的增强
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-05-29
最后修改:2009-05-29
在 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' } }); 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |