`
feidaozhou
  • 浏览: 13804 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

为ExtJS添加超时跳转

阅读更多
这篇文章大部分内容是从其他地方看到的,只是自己添加了些内容。

对于普通的http请求,可以通过拦截器判断session超时,然后跳转到登录页面;但是对于Ajax请求,则不会如期待的那样自动转到登录页面,若想实现,必须特殊处理。
不论是普通http请求还是ajax请求,都可以通过拦截器来将请求捕获,而且区分这两种请求在于头部信息的不同:普通http请求的header参数中没有x-requested-with:XMLHttpRequest头信息,而异步的有。

个人呢认为Ext的Ajax请求分为这么几种,Ext.Ajax类、Ext.data.Connection类、Ext.data.HttpProxy类,其中Ext.Ajax类是对Ext.data.Connection类封装的单一实例,Ext.data.HttpProxy内部引用的还是Ext.Ajax类,所以我们需要为Ext.data.Connection类设置统一的超时处理。

我在Ext.data.Connection的源码中直接为其添加个监听,让它在发生异常时实现跳转
listeners:{
	'requestcomplete':{
		fn:function(conn,response,options){
			 if(response.getResponseHeader.sessionstatus){ 
	        window.location.href='error.jsp';  
	    } 
		}
	}
},	


Action中拦截器的处理和原来几乎一样,只是在超时的处理上添加一个分支
if (request.getHeader("x-requested-with") != null
		&& request.getHeader("x-requested-with").equalsIgnoreCase(//ajax超时处理
				"XMLHttpRequest")) {
	response.addHeader("sessionstatus", "timeout");
}else{//http超时的处理
}
分享到:
评论
1 楼 AnDong 2010-04-02  
这个判断逻辑有问题,当遇到文件上传表单时,Ext是不会添加该header信息的,不知道是不是Ext的一个bug。

相关推荐

Global site tag (gtag.js) - Google Analytics