Javascript 本机ajax调用不会在302上重定向
我已经在谷歌上搜索了几个小时了。我已经阅读了关于Stackoverflow的十几个“答案”,它们都使用jQuery 这是常见的答案 ajax请求将跟随重定向afaik 嗯,没有 我试图通过原生JS AJAX从表单发送PUT [请不要告诉我使用jQuery。我通过PUT在jQuery中发现了一个bug ()所以我要绕过去] 这是我的代码片段Javascript 本机ajax调用不会在302上重定向,javascript,ajax,redirect,httpresponse,http-redirect,Javascript,Ajax,Redirect,Httpresponse,Http Redirect,我已经在谷歌上搜索了几个小时了。我已经阅读了关于Stackoverflow的十几个“答案”,它们都使用jQuery 这是常见的答案 ajax请求将跟随重定向afaik 嗯,没有 我试图通过原生JS AJAX从表单发送PUT [请不要告诉我使用jQuery。我通过PUT在jQuery中发现了一个bug ()所以我要绕过去] 这是我的代码片段 var xhr = new XMLHttpRequest(); xhr.open(method, url); xhr.setRequestHead
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);
};
这个区块的工作非常好,我可以张贴,放置和删除没有问题。服务器接收数据并根据sent方法更新数据库
成功完成后,我的(基于SLIM的)PHP将返回一个302和一个要转到的URL
这个过程使用POSTMAN点击PHP,并转到正确的页面
打开Chrome工具/网络,它显示PHP返回的是302而不是200
My response对象包含responseText属性中页面的完整HTML
有趣的是,如果我硬编码一个错误的URL,浏览器就会转到我的404页面
你的想法?(请不要问我或告诉我使用jQuery)
编辑/补遗-----------------------
我发现重定向使用了与原始调用相同的方法
我在做什么
PUT /user/1
重定向正在执行
PUT http://myserver.test/
这是去的好地方。现在我明白405了
我没有定义PUT路由,因此405
我创建了一个PUT路由,它在POSTMAN中工作,但在Chrome和Firefox中仍然可以得到405
我有两个问题需要解决:
1) 更改重定向上的方法
2) 找出浏览器不喜欢307的原因,我找到了“a”解决方案。我不确定我是否喜欢,但是
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
}
};
var xhr=new-XMLHttpRequest();
open(方法,url);
setRequestHeader('Content-Type','application/json');
发送(数据);
xhr.onload=函数(e){
if(xhr.readyState==4){
window.location.replace(xhr.responseURL)打开Chrome Tools/Network,它显示PHP返回的是302,而不是200。我有点困惑,你解释它做什么,就是你想要它做什么。我正在寻找浏览器跳转到304中定义的URI。你的意思是返回307吗,304没有被修改。302是一个重定向,但因为弄乱了requ而闻名是的,我错过了关于304的演讲,我是说302。我更正了。是的,307在这个例子中更有意义。现在我得到了307,后面是405。进展!差不多了