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

如何判断一个请求是否为AJAX请求
   在一次做非常复杂的ajax应用时,如果一个会话已经超时,但是此时再通过ajax请求,那么ajax返回的则是一个登陆页面的html,那这下就惨了,页面上而已就乱了,那么,能否在java端,如拦截器里判断客户的的请求是否是ajax请求呢,经过查询,能.
   普通请求与ajax请求的报文头不一样,通过如下

String requestType = request.getHeader("X-Requested-With");

如果requestType能拿到值,并且值为XMLHttpRequest,表示客户端的请求为异步请求,那自然是ajax请求了,反之如果为null,则是普通的请求

19 楼 Cindy_Lee 2011-06-07  
其实你想要的就是多视图配置,spring mvc和struts2都有类似的解决方案
20 楼 jbm3072 2011-06-07  
会话过期的话,可以在跳转页面上设置http状态码为500,ajax处理错误码为500的错误即可.同时,添加页面的javascript,使其跳转到登陆页面.
21 楼 wenzhui5 2011-06-07  
还有木有其他的思路哈!
22 楼 int08h 2011-06-07  
X-Request-With不是XMLHttpRequest自己的特性,只是各个库比较统一地都用了这个头,jquery/ext/kissy/tangram/yui等都会自己给加上而已,如果是自己来实现ajax函数的话,就要注意下了
23 楼 pujia12345 2011-06-07  
一切都是浮云。
HTTP 请求就是字符串请求,随你组合了,比如,在你想“超时返回页面“的ajax请求增加参数:ret=index,“返回注册页面”的加参数:ret=regedit,“返回出错页面”的家参数:ret=error
24 楼 BearRui 2011-06-07  
我们的做法是,配置strust可以处理.do和.rmi2个后缀的请求,所有的ajax请求都请求rmi后缀,其他的请求使用.do后缀,这样来区分。
25 楼 Simon.Wang 2011-06-07  
还是用不同的URL来做比较容易控制
26 楼 sky_dream 2011-06-07  
设置head是一种方法,另外,在方法中添加请求类型参数,就可以区分开了。
27 楼 xiaoxiaoniao11 2011-06-07  
redish 写道
fflame 写道
呃,从安全角度说,会话过期以后,返回登录页面是应该的吧?换句话说,处理应该是前台分析一下返回值,并相应的处理吧?
个人意见。。。。

我也是这么处理的,会话过期返回相应的值,前台取到值并处理。

+1
28 楼 edokeh 2011-06-07  
用REST的思路来做
根据http的accept头不同,来返回不同的结果
29 楼 airpeng 2011-06-07  
zwllxs 写道
   能否在java端,如拦截器里判断客户的的请求是否是ajax请求呢


判断出来了你想怎么样?

我之前的处理是在前台里弄的,判断返回的是登陆页面就让他整个跳到登陆页面去
30 楼 zwllxs 2011-06-07  
airpeng 写道
zwllxs 写道
   能否在java端,如拦截器里判断客户的的请求是否是ajax请求呢


判断出来了你想怎么样?

我之前的处理是在前台里弄的,判断返回的是登陆页面就让他整个跳到登陆页面去



你这样的话,项目中所有的ajax请求所在的页面,都要去单独判断单独处理,并且如果新加了ajax请求模块,你又要去格外处理,如果项目中的ajax请求多了,开发和维护就麻烦了,
所以如果能在拦截器中一次性处理那就更好,目前我就是在拦截器中返回一个逻辑视图,然后在全局配置中,通过这个逻辑视图去指向一个页面。然后你可以在这个页面上任意发挥了,你可以将这个页面做成div弹框,你也可以直接简单写几个字,直接提醒用户去重新登陆,但是,在这里不能写js,因为异步响应返回的js,是不会被识别的
31 楼 ltj 2011-06-08  
AJAX请求和普通请求后缀分开。
filter判断,然后分开处理。一劳永逸。

32 楼 sebatinsky 2011-06-08  
呵呵,这个的确是一个问题