请教一个href,ajax,重定向之间的问题
今天在开发中遇上一个问题
就是当前端直接href一个接口 (接口中有重定向的代码)
这样可以直接重定向
但当前端是用ajax请求这个接口的时候 将无法重定向
为什么? 请各位大大讲解下原理
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
今天在开发中遇上一个问题
就是当前端直接href一个接口 (接口中有重定向的代码)
这样可以直接重定向
但当前端是用ajax请求这个接口的时候 将无法重定向
为什么? 请各位大大讲解下原理
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
ajax本身无法实现重定向。
你可以通过改造后端返回结果并在前端的回调函数里判断后执行页面跳转。
基本思路是后端判断请求头是否包含ajax信息
比如
isAjax = request.getHeader("x-requested-with").equals("XMLHttpRequest");
,然后根据不同请求执行不同的操作,比如直接执行跳转或返回跳转url信息,由前端跳转。我的理解:
前者是地址的跳转,后者是访问无刷新服务器的接口。当你仅仅访问接口而不做页面的跳转怎么会有重定向一说呢,ajax就是做无刷新用的。
一定要在客户端跳转,ajax请求不同浏览器请求,不会接受到3xx状态码。
Ajax是做异步请求的。你需要判断状态码进行相应的操作。
一般都是根据后端返回结果然后js跳转
ajax 在 301 状态下是可以正常工作的,
但是前提是, 需要满足同源策略!
如果有这种需求, 可以让 nginx 路径代理到 对应的网址
ajax本來只是在頁面無刷新的狀態下和服務器坐數據交互(你要理解數據交互的意思),及轉句話說客戶端只是接收服務器端index/index/api輸出的內容。而無法執行其包含的js代碼和php命令.
所以要重定向的話必須由前端去處理,以下是正確的處理方法:
你修改一下async试一试!