【问题标题】:Chrome doesn't always send POST requestChrome 并不总是发送 POST 请求
【发布时间】:2018-12-26 21:46:03
【问题描述】:

我正在使用“获取”对我的节点服务器进行后调用。我正在尝试通过单击按钮来执行此操作。

当我单击按钮时,会发送一个 OPTIONS 请求,但浏览器不会发送后续的 POST 调用。

在多次点击时,浏览器会不断发送选项请求,并且在多次尝试中只会发送一次发布请求。

let data = {name: "Butternut cucumberpatch", age: 26}
let headers = new Headers()
headers.append("Content-type", "application/json")

fetch(join(apiPath, "/user"), {
  method: "POST",
  headers: headers,
  body: JSON.stringify(data)
}).then(response => response)

(1) 代码工作在我同事的 chrome 浏览器上,而不是我的。 chrome版本是一样的。 (2) 这在 POSTMAN、Safari 上运行良好。 (3) 我认为本机 fetch 可能存在问题,所以我尝试使用 'fetch'、'unfetch'、'request' 模块。但仍然面临同样的问题。

【问题讨论】:

  • 问题可能出在服务器上。
  • 显示您的实际测试脚本,包括 console.log 以展示您如何获得响应。当前脚本不会对结果做任何事情。
  • @Barmar 它适用于邮递员。还是服务器的问题吗?
  • 您发布的是飞行前OPTIONS 请求。您是否也在浏览器中看到了POST 请求?
  • @Barmar 直到我再次发送帖子请求几次。请求发生在点击事件上。每次单击按钮时都会运行上述发布请求代码,但是直到我进行 3-4 次尝试后发布请求才会发生。仅发送选项。这是随机的。

标签: javascript google-chrome cors http-headers fetch-api


【解决方案1】:

我在这里找到了解决方案: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#Preflighted_requests

由于我的 POST 请求是跨源请求,因此请求预检正在发生。我将我的 Content-Type 更改为 application/x-www-form-urlencoded

如果我使用 Content-Type 发送请求:application/x-www-form-urlencoded,则每次都会发生 POST 请求。我仍然不知道为什么它(应用程序/json)可以在我同事的 chrome 浏览器上运行,而不是我的。 我想让它与 application/json 一起工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 2014-04-16
    • 2018-10-29
    • 2018-12-27
    相关资源
    最近更新 更多