日期:2014-05-16  浏览次数:20706 次

Ajax请求session过期解决方法
ajax和正常浏览器请求要分开处理, 正常浏览器请求直接在服务器端用重定向即可, ajax请求可在服务端设置一个状态, 如Forbidden, 然后在Extjs中的ajax请求异常处理中进行重定向即可.
服务器端代码示例:
Java代码 复制代码

   1. if (httpRequest.getHeader("x-requested-with") != null && httpRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {  
   2.             if (sessionUser == null) {  
   3.                 httpResponse.setStatus(HttpServletResponse.SC_FORBIDDEN);  
   4.             } else {  
   5.                 chain.doFilter(httpRequest, httpResponse);  
   6.             }  
   7.         } else {  
   8.             if (sessionUser != null) {  
   9.                 chain.doFilter(httpRequest, httpResponse);  
  10.             } else {  
  11.                 String path = httpRequest.getContextPath();  
  12.                 httpResponse.sendRedirect(path + "/dm/login.jsp");  
  13.             }  
  14.         } 

if (httpRequest.getHeader("x-requested-with") != null && httpRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) {
if (sessionUser == null) {
httpResponse.setStatus(HttpServletResponse.SC_FORBIDDEN);
} else {
chain.doFilter(httpRequest, httpResponse);
}
} else {
if (sessionUser != null) {
chain.doFilter(httpRequest, httpResponse);
} else {
String path = httpRequest.getContextPath();
httpResponse.sendRedirect(path + "/dm/login.jsp");
}
}



Extjs中Ajax请求处理
init: function() {
  //你原来的代码下面添加全局Ajax异常处理
  Ext.Ajax.on('requestexception', (你的ajax异常处理函数));
},

异常处理函数如:
function(conn, response, options) {
if (response.statusText == 'Forbidden') {
window.location = '../index.jsp'; //你要做的操作, 如重定向到登陆页面
} else {
displayMessage("Oops: " + response.statusText
+ ", please reload this page and try again");
}
};

而我的程序是Jquery,关于jquery的异步提交方法介绍如下:
转自:http://www.cnblogs.com/yeer/archive/2009/07/23/1529460.html

jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯。

废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对jQuery.ajax()进行封装以方便我们使用的方法,当然,如果要处理复杂的逻辑,还是需要用到jQuery.ajax()的(这个后面会说到).

1. load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中。

url (String) : 请求的HTML页的URL地址。

data (Map) : (可选参数) 发送至服务器的 key/value 数据。

callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。

这个方法默认使用 GET 方式来传递的,如果[data]参数有传递数据进去,就会自动转换为POST方式的。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some > selector"。

这个方法可以很方便的动态加载一些HTML文件,例如表单。

示例代码:

$(".ajax.load").load("http://www.cnblogs.com/yeer/archive/2009/06/10/1500682.html .post",<