一般我们会在过滤器里判断登录状态,如果没登录就跳转登录页面,过滤器java核心代码如下:

UserItem loginUser = (UserItem)request.getSession().getAttribute("loginUser");
if(loginUser == null) {
response.sendRedirect("/login.action");
}
这个对于普通页面来说完全没问题,但是在使用ajax的时候往往得不到想要的效果。因为页面根本没跳转,只是捕获到了登录页面的源码而已。

网上一堆庸人给出一堆扯蛋的方法,主要有。

1.返回的字符串附加登录状态;(那么多,你愿意改么,而且前后端都得改,编码的时候还要总去考虑那个状态烦不烦)

2.修改http头信息;(装B深沉型)

3.修改jquery源文件判断;(勉强算个程序员,但是尽力不去动源,性能问题你还得解压再压缩,别人也不一定知道你改过源码)

我的解决方案跟第三种方法思路接近,重写ajax方法实现前置处理,代码如下:

jQuery(function($){
// 备份jquery的ajax方法
var _ajax=$.ajax;
// 重写ajax方法,先判断登录在执行success函数
$.ajax=function(opt){
var _success = opt && opt.success || function(a, b){};
var _opt = $.extend(opt, {
success:function(data, textStatus){
// 如果后台将请求重定向到了登录页,则data里面存放的就是登录页的源码,这里需要找到data是登录页的证据(标记)
if(data.indexOf('weinianjie') != -1) {
window.location.href= Globals.ctx + "/login.action";
return;
}
_success(data, textStatus);
}
});
_ajax(_opt);
};
});

在登录页面的源码里面,你随便找个地方打个标记然后隐藏掉,比如我的标记就是weinianjie。对于$.get和$.post就不用说了吧,这两个方法都是调用了$.ajax方法的,所以也就自动获取了前置判断能力。

大功告成,注意以上扩展需要放在你的所有ajax请求之前执行。



更多相关文章

  1. [jquery]如何实现页面单块DIV区域滚动展示
  2. 整理:Google jQuery 引用地址大全和方法(转)
  3. 基于Jquery ui 可复用的酒店 web页面选择入住日期插件
  4. 在ASPX页面中使用webmethod服务AJAX请求。
  5. JQuery Mobile 手机显示页面偏小
  6. jquery的$.alerts.alert怎么实现点击后跳转页面
  7. 记录前台页面一些jQuery笔记
  8. 从另一个页面返回后,$(document).ready()无效
  9. 登陆页面有延迟然后自动向下滚动

随机推荐

  1. Android:控件布局(相对布局)RelativeLayout
  2. android ICS4.0.3 改变默认字体大小
  3. android带动画的圆形进度条
  4. android 设置界面
  5. android的apk包签名
  6. Androidx学习笔记(7)--常见布局--相对布局
  7. Android(安卓)5.X新特性——Material Des
  8. Android中对Handler用法的总结
  9. Android:apk文件结构及打包技巧
  10. android开发学习大纲