原生ajax调用不会重定向302

时间:2018-04-29 22:33:11

标签: javascript ajax redirect httpresponse http-redirect

我一直在谷歌上搜索几个小时。我在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

1 个答案:

答案 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
    }
  };
相关问题