这篇文章大部分内容是从其他地方看到的,只是自己添加了些内容。
对于普通的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超时的处理
}
分享到:
相关推荐
如果检测到这是一个AJAX请求,过滤器会在响应头中添加一个自定义字段`sessionstatus`,并将值设为"timeout"。对于非AJAX请求,直接重定向到指定的登录页(例如`/test/index.jsp`)。 接下来,在客户端,我们需要...
3. **表单验证与提交**:在`subjectForm`函数中,使用`myform.getForm().isValid()`检查表单是否有效,如果有效,则通过`form.submit()`方法提交表单数据,设置等待消息、超时时间、成功和失败回调。成功回调会根据...
在这种情况下,我们可以添加一个自定义的响应头`sessionstatus`,并设置其值为"timeout"。同时,返回一个JSON对象,包含错误信息和重定向URL,如下所示: ```javascript if (findHtml ) { response.addHeader(...
然而,Session不能永久保持,它有默认的超时时间,超过这个时间如果没有接收到客户端的任何请求,Session就会被视为过期。在本文中,我们将探讨如何在Session过期后自动将用户重定向到登录页面。 首先,开发者可能...
当客户端的浏览器关闭或者Session超时时,Session将被视为失效。 当EXT应用检测到Session失效,它需要与后端服务器进行通信,确认Session状态。这通常是通过Ajax请求完成的。如果后端返回的响应表明Session已过期,...
如果服务器端没有正确返回包含有success: true的json对象,那么即使服务器处理了表单提交的数据,Extjs4的回调机制也不会触发success函数,而可能会跳转到error回调函数中去,甚至可能出现回调函数都不执行的情况。...
- **添加页面**:为PageControl添加多个子页面。 - **切换页面**:通过编程逻辑实现在各个页面间的切换。 #### 43. UniGUITreeView处理 `UniGUITreeView`的处理主要包括构建树形结构、绑定数据源以及实现节点的...