前端通过ajax请求一个cotroller,后端redirect301的问题!

@JFinal@杜福忠

我的前端通过ajax请求一个controller,该方法要render一个html页面。但如果拦截器发现登录超时,我想让浏览器直接跳转到登录界面。在拦截器里这么写:

Controller c = inv.getController();

c.redirect301("/login");


浏览器并不会跳转,只是这个ajax请求到的html是登录页面。有没有办法解决这个问题。

我试过redirect,redirect301,forwardAction,都不行。


评论区

杜福忠

2022-03-02 19:50

我一般是封装ajax请求为一个httpKit工具,业务统一使用httpKit发起请求。
然后httpKit里面判断返回码,
如果code==0就是正常,回调给业务data,
如果code==301就js重定向data为url,
如果code==XXXX内部全局码,做相应的处理,比如1XXX为系统码,2XXX为某模块的码,
未知错误就判断是否有错误回调对象,否则弹窗提醒msg,
后端是renderJson(Kv.by("code", 0).set("data", xxx).set("msg", xxx));
推荐使用Ret

zzutligang

2022-03-03 00:03

@杜福忠 如果是请求后端返回json,这做完全没问题。并且我现在也是这么做的。但我这里请求的是后端,是渲染一个html页面。这个时候,我就没办法判断返回值了。
比如我请求一个controller方法,渲染一个form在前端的弹窗里。这时候如果登录超时了,我想让浏览器直接导航到登录页面。但现在就把登录页面渲染在弹窗里。这个问题困扰我很久了。

杜福忠

2022-03-03 10:30

@zzutligang 昂,是HTML啊,看茬了,那用 axios 发起请求就可以了,还是自己封装一下,里面随便切换请求工具:
https://www.runoob.com/vue3/vue3-ajax-axios.html

happyboy

2022-03-03 10:48

有办法,所有前端的ajax请求统一用一个封装的方法发起,不要单独写,方便统一处理。后台在收到请求后,判断下两个状态:是不是异步请求(百度下,很容易实现)+有没有登录失效。如果符合这两个状态,就返回一个code码,前端收到这个状态后,重定向到登录页。

happyboy

2022-03-03 10:49

@杜福忠 帖子里直接at小杜,可见小杜在Jfinal社区里是有多浪。

zzutligang

2022-03-03 10:55

@happyboy 因为知道杜总是JFinal大神级的人物,所以就直接at他了。

happyboy

2022-03-03 10:56

@zzutligang 你不at他,他也会过来浪。

杜福忠

2022-03-03 14:19

@happyboy 没啥爱好,工作累了休息一下就逛下几个社区放松一下

zzutligang

2022-03-03 14:21

@杜福忠 问题解决方案我发到分享里了。感谢!
https://jfinal.com/share/2534

杜福忠

2022-03-03 14:35

happyboy

2022-03-03 14:51

热门反馈

扫码入社