我一直在谷歌上搜索几个小时。我在Stackoverflow上读了十几个“答案”,所有这些都是使用jQuery。
这是常见的答案......
ajax-request将遵循该重定向afaik
嗯,事实并非如此。
我正在尝试通过原生JS AJAX从表单发送PUT
[求求你,不要告诉我使用jQuery。我通过PUT在jQuery中发现了一个错误 (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) {
if (xhr.status === 200) {
console.log(xhr.responseText);
} else {
console.error(xhr.statusText);
}
}
};
xhr.onerror = function (e) {
console.error(xhr.statusText);
};
这个块工作得很好,我可以POST,PUT和DELETE没有问题。服务器接收数据并根据发送的METHOD更新数据库。
My(基于SLIM)PHP成功完成后,返回302和URL以转到。
此过程使用POSTMAN命中PHP,然后转到右页。
打开Chrome工具/网络,它显示PHP返回302而不是200
我的回复对象包含 responseText 属性中页面的完整HTML。
有趣的是,如果我对一个错误的网址进行硬编码,浏览器会很好地进入我的404页面。
你的想法? (请不要问我或告诉我使用jQuery)
EDIT / ADDENDUM -----------------------
我发现重定向使用的是原始调用的相同方法。
我在做
PUT /user/1
重定向正在进行
PUT http://myserver.test/
这是正确的去处。现在我明白了405。
我没有定义PUT路由,因此405。
我创建了一个PUT路线,它在POSTMAN中工作,但仍然在Chrome和Firefox中提供了405个。
我有2个问题需要解决: 1)在重定向上更改METHOD 2)弄清楚为什么浏览器不喜欢307
答案 0 :(得分:0)
我找到了“一个”解决方案。我不确定我喜欢它,但是......
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
}
};