【发布时间】:2018-08-28 10:19:26
【问题描述】:
和标题说的差不多。我有一个在 GET 上运行良好的 ajax 调用,但 PUT 给了我跨域错误:
跨域请求被阻止:同源策略不允许读取位于http://myDomainPC:6764/Forms/MyAction/2 的远程资源。 (原因:CORS 标头“Access-Control-Allow-Origin”缺失)。
这是代码。调用的 url 转到
"http://myDomainPC:6764/Forms/MyAction/" + (InspectionID != 0 ? InspectionID : "")
如果不是通过查询字符串传入,则检查 ID 的默认值为 0。
我已根据此 SO 帖子添加了扩展标头属性(但没有更改):jquery $.ajax cross-domain GET works but not POST
$.ajax({
url: ajaxDataSaveInspectionURL,
data: pageHeader,
dataType: "json",
type: "PUT",
crossDomain: true,
headers: { "Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
"Access-Control-Allow-Headers": "accept, origin, authorization, content-type, content-length, connection, x-requested-with, user-agent"},
contentType: "application/json",
success: function(result){
//do stuff here
},
error: function(xhr, settings){
switch (xhr.status) {
case 404: //and other statuses...
//do stuff here
break;
}
}).done(function (data) {
//do stuff here too
});
另一位开发人员已确认我们调用的 API 已正确设置,可以接受来自任何地方的请求。
这里发生了什么,除了错误之外,我需要进行更改才能得到一些东西?
【问题讨论】:
-
让我猜猜该网站是托管在共享托管服务器上的吧?
-
您的服务器是否位于:ajaxDataSaveInspectionURL?如果是这样,您需要将服务器设置为发送正确的 CORS 标头而不是您的客户端。 CORS 问题的解决方法也可以是应用程序代码中的本地代理。
-
您为什么要在客户端设置所有这些服务器端标头? API 是否要求您设置 contentType?如果没有,您不应该这样做,因为这会强制进行预检。
标签: javascript jquery ajax