我正在对另一个来源的API进行AJAX调用。如您所知,对于CORS请求,如果将Content-Type设置为application / json,则会导致预检请求(OPTIONS)。但是我正在调用的API为OPTIONS请求返回“404 not found”。因此,不会发送实际的POST请求。
当然,如果我没有明确设置内容类型,它只发送POST请求,因为格式化问题,我得到“400 Bad request”。
我已使用相同的参数在Google Chrome高级REST客户端扩展程序上测试了此调用。 content-type设置为“application / json”。当我发送请求并查看chrome的控制台时,我看到只发送了实际的POST请求,服务器返回“200 OK”,其中包含我实际需要的数据。
不是很奇怪吗?我错过了什么吗?在这种情况下,有没有办法只发送POST请求?
我的AJAX调用片段如下所示,没什么特别的:
$.ajax({
type: "POST",
url: myURL,
data: JSON.stringify({
someJSON
}),
contentType: 'application/json',
dataType: 'json',
success: function (resp) {
...
},
error: function (x, y, z) {
...
}
});
感谢。
答案 0 :(得分:1)
解决您问题的最简单方法是删除导致预先发送到服务器的请求设置。根据{{3}},基本上所有可能修改数据的AJAX和HTTP请求方法都受CORS限制。
简单方法是以下之一
GET
HEAD
POST
简单标题是以下之一
Accept
Accept-Language
Content-Language
Content-Type
如果是application/x-www-form-urlencoded
,multipart/form-data
或text/plain
在您的情况下,您可以删除ajax调用的内容类型设置
$.ajax({
type: "POST",
url: myURL,
// remove content-type and allow jquery to process your data
data: someData,
dataType: 'json',
success: function (resp) {
...
},
error: function (x, y, z) {
...
}
});
当然,这对于发送到服务器的复杂数据对象不起作用。在这种情况下,您需要将服务器配置为允许此类请求,方法是使用正确的标头响应OPTIONS请求,通常是Access-Control-Allow-Origin
,Access-Control-Allow-Methods
和Access-Control-Request-Headers
。