本机 ajax 调用不会在 302 上重定向
Posted
技术标签:
【中文标题】本机 ajax 调用不会在 302 上重定向【英文标题】:Native ajax call does not redirect on 302 【发布时间】:2018-10-10 01:01:21 【问题描述】:我已经搜索了好几个小时了。我在 *** 上阅读了十几个“答案”,所有这些都使用 jQuery。
这是常见的答案...
ajax 请求将跟随重定向 afaik
好吧,它没有。
我正在尝试通过本机 JS AJAX 从表单发送 PUT
[求求你,不要告诉我使用 jQuery。我通过 PUT 在 jQuery 中发现了一个错误 (1) 所以我要绕过它]
这是我的代码 sn-p...
var xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(data);
xhr.onload = function (e)
if (xhr.readyState === 4)
if (xhr.status === 200)
console.log(xhr.responseText);
else
console.error(xhr.statusText);
;
xhr.onerror = function (e)
console.error(xhr.statusText);
;
这个块很好用,我可以毫无问题地发布、放置和删除。服务端接收到数据并按照发送的METHOD更新DB就好了。
我的(基于 SLIM 的)php 成功完成后,会返回 302 和要访问的 URL。
此过程使用 POSTMAN 访问 PHP,然后转到正确的页面。
打开 Chrome 工具/网络,它显示 PHP 返回 302 而不是 200
我的响应对象在 responseText 属性中包含页面的完整 html。
有趣的是,如果我硬编码了一个错误的 URL,浏览器会正常访问我的 404 页面。
你的想法? (请不要问我或告诉我使用 jQuery)
编辑/附录-----------
我发现重定向使用的方法与原始调用相同。
我在做
PUT /user/1
重定向正在做
PUT http://myserver.test/
这是正确的去处。现在我了解了 405。
我没有定义 PUT 路由,因此是 405。
我创建了一个 PUT 路由,它在 POSTMAN 中工作,但在 Chrome 和 Firefox 中仍然给我一个 405。
我有 2 个问题需要解决: 1) 更改重定向上的 METHOD 2) 找出浏览器不喜欢 307 的原因
【问题讨论】:
Opening Chrome Tools/Network, it shows that the PHP is returning a 302 and than a 200
我有点困惑,你解释它做什么,就是你想要它做什么..
我正在寻找浏览器跳转到304中定义的URI。
你的意思是返回307,304没有修改。 302 是一个重定向,但以弄乱请求而闻名。
是的,我错过了 304,我的意思是 302。我更正了。是的,在这种情况下,307 更有意义。现在我得到了 307,然后是 405。进步!差不多
【参考方案1】:
我找到了“一个”解决方案。我不确定我是否喜欢它,但是...
var xhr = new XMLHttpRequest();
xhr.open(method, url);
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(data);
xhr.onload = function (e)
if (xhr.readyState === 4)
window.location.replace(xhr.responseURL); // <---- solution
;
【讨论】:
以上是关于本机 ajax 调用不会在 302 上重定向的主要内容,如果未能解决你的问题,请参考以下文章