jfinal对ajax请求的拦截器设置
@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请求,根据拦截器情况,让他们跳转到指定页面,该怎么做呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
lsioui 正解!
回复
我现在进行redirect了,那这个ajax请求,最后还是会执行回调啊,要么是他的success,要么是他的error函数。我重定向之后,页面jsp源码返回了,但是不会解析,也就是不会跳转还是
回复
不管你怎么render,被你拦截的那个ajax,他的success和error应该还是会执行的吧。你现在render一推html代码过去,但是之前的那个ajax,返回值类型可能是text,他怎么会知道你传回来的是html代码,需要解析
回复
如果是json请求,可以用renderJson
楼上的两位,好像说得文不对题啊。。。。
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));
嗯,我应该要统一封装ajax情况。然后指定,如果返回的json.code=1000就表示要跳转到XXX页面。这样就可以解决这样的问题
还是需要在js里判断json.code吗?请问您现在有更好的解决办法了吗?
回复
还是需要在js里判断json.code吗?请问您现在有更好的解决办法了吗?
回复
封装一个统一的ajax请求函数,然后在回调里面判断json.code
既然全部请求都是 ajax, 那么 jfinal 那端无论返回什么,都无法实现页面跳转,只有你 ajax 这头拿到数据以后,然后 js 实现页面的跳转。jfinal 后端返回的只是各种类型的数据而已,并不能直接控制你的页面进行跳转