jfinal对ajax请求的拦截器设置

清风-蓝魔泪 发布于 2014/12/29 15:35
阅读 1K+
收藏 2

@JFinal 你好,想跟你请教个问题:

问一下,jfinal的拦截器处理。现在我的项目,所有的请求都是ajax请求。现在我加了一个登陆页面

登陆的时候,会在session中设值,如果不登陆,直接访问,那拦截器拦截到你的请求,发现session里面没值,就会让页面跳转到登陆页面

那么问题来了,各种各样的ajax请求,有的dataType=text,有的dataType=json。现在我render("/login.jsp"),发现跳转不过去。

我自己F12看了,我发现response是返回了login.jsp的源码的,只不过页面没有去解析这种html返回值

拦截的ajax,回调函数都只写了success和error。客户端本来打算接收到的是json,现在服务器返回一个jsp的源码,他还是按照原来success里面的代码来执行,就没跳过去。我觉得应该是这样

那现在,我需要达到拦截各种类型的ajax请求,根据拦截器情况,让他们跳转到指定页面,该怎么做呢?

加载中
1
JFinal
JFinal

     既然全部请求都是 ajax, 那么 jfinal 那端无论返回什么,都无法实现页面跳转,只有你 ajax 这头拿到数据以后,然后 js 实现页面的跳转。jfinal 后端返回的只是各种类型的数据而已,并不能直接控制你的页面进行跳转

清风-蓝魔泪
清风-蓝魔泪
回复 @_时光 : 封装一个统一的ajax请求函数,然后在回调里面判断json.code
_
_时光
回复 @清风-蓝魔泪 : 还是需要在js里判断json.code吗?请问您现在有更好的解决办法了吗?
_
_时光
还是需要在js里判断json.code吗?请问您现在有更好的解决办法了吗?
清风-蓝魔泪
清风-蓝魔泪
嗯,我应该要统一封装ajax情况。然后指定,如果返回的json.code=1000就表示要跳转到XXX页面。这样就可以解决这样的问题
0
山东-小木
山东-小木
自己定义一个annotation例如@uncheck 在ajax请求登陆的方法上 拦截器拦截到的时候 判断一下有没有此@uncheck有的话直接通过
0
iginx
iginx
Map<String, Object> map = new HashMap<String, Object>();
        try {
            int[] ret = DbPro.use(module).batch(sql, JsonToObject2(param), 100);
            map.put("success", true);
            map.put("data", ret);
        } catch (Exception e) {
            map.put("success", false);
            map.put("data", e.getMessage());
        }
        renderJson(JsonKit.toJson(map));
0
清风-蓝魔泪
清风-蓝魔泪
楼上的两位,好像说得文不对题啊。。。。
0
lsioui
lsioui

// 在拦截器中判断是否ajax请求

String ajax = ai.getController().getRequest().getHeader("X-Requested-With");

if("XMLHttpRequest".equals(ajax)){...}

lsioui
lsioui
回复 @清风-蓝魔泪 : 如果是json请求,可以用renderJson
清风-蓝魔泪
清风-蓝魔泪
回复 @lsioui : 不管你怎么render,被你拦截的那个ajax,他的success和error应该还是会执行的吧。你现在render一推html代码过去,但是之前的那个ajax,返回值类型可能是text,他怎么会知道你传回来的是html代码,需要解析
lsioui
lsioui
回复 @清风-蓝魔泪 : 有2中方式,一种ai.getController().redirect(/login),一种ai.getController().render("/WEB-INF/pages/xx/login.html"); 第一中,会被拦截器再次拦截,所以你要在login()所在的类去除拦截器拦截。第二种就不会了,直接返回页面信息。
清风-蓝魔泪
清风-蓝魔泪
回复 @lsioui : 我现在进行redirect了,那这个ajax请求,最后还是会执行回调啊,要么是他的success,要么是他的error函数。我重定向之后,页面jsp源码返回了,但是不会解析,也就是不会跳转还是
lsioui
lsioui
回复 @清风-蓝魔泪 : 你可以在拦截器里做任何事情啊 比如重定向 : ai.getController().redirect("/login"); return;
下一页
0
好尴尬啊
好尴尬啊

lsioui 正解!

返回顶部
顶部