【发布时间】:2015-09-29 04:37:38
【问题描述】:
我正在对另一个来源的 API 进行 AJAX 调用。如您所知,对于 CORS 请求,如果将 Content-Type 设置为 application/json,则会导致预检请求 (OPTIONS)。但是我正在调用的 API 为 OPTIONS 请求返回“404 not found”。所以实际的 POST 请求并没有发送出去。
当然,如果我没有明确设置内容类型,它只会发送 POST 请求,我会收到“400 Bad request”,因为格式问题。
我已经在具有相同参数的 Google Chrome 高级 REST 客户端扩展上测试了此调用。内容类型设置为“应用程序/json”。当我发送请求并查看 chrome 的控制台时,我看到只发送了实际的 POST 请求,服务器返回“200 OK”以及我实际需要的数据。
是不是很奇怪?我错过了什么吗?在这种情况下有没有办法只发送 POST 请求?
我的 AJAX 调用 sn-p 如下所示,没什么特别的:
$.ajax({
type: "POST",
url: myURL,
data: JSON.stringify({
someJSON
}),
contentType: 'application/json',
dataType: 'json',
success: function (resp) {
...
},
error: function (x, y, z) {
...
}
});
谢谢。
【问题讨论】:
-
我相信如果您设置自定义标题,它只会执行预检选项
-
您需要配置您的服务器来处理 CORS 请求或使用 jsonp
-
据我了解,根据 W3 规范,设置内容类型标头也会导致此问题。 @mplungjan
-
@devconcept,是的,我知道,但是 Chrome 的 REST 客户端呢?它如何只发送 POST 请求并检索所需的数据?
标签: jquery ajax json http-headers cors