本机 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 上重定向的主要内容,如果未能解决你的问题,请参考以下文章

在 Laravel POST 请求上重定向 302

302 重定向后的 AJAX 调用将源设置为 null

ajax与重定向

JQuery Ajax 在不设置 cookie 的情况下自动重定向?

无法在 ajax 中处理 302 重定向,为啥? [复制]

302 重定向是如何发生的?