【问题标题】:Ajax cross domain GET works, PUT/POST gets cross domain errorAjax 跨域 GET 有效,PUT/POST 得到跨域错误
【发布时间】: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


【解决方案1】:

Access-control-allow 标头(CORS 标头)是应由您发出请求的服务设置的响应标头。在你的情况下,API。进行ajax调用时,您无需将它们设置为请求标头。

你可以在这里https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS阅读更多关于CORS的信息

干杯!

【讨论】:

    【解决方案2】:

    经过大量调查,发现问题有两个方面:

    1. 数据负载包含多个 DateTime 字段,这些字段在日期和时间部分之间没有得到“T”。这意味着它不能反序列化为 DateTime 对象。因此会产生 500 错误。

    2. 服务是用 .Net Core 编写的。因为 DateTime 值没有正确反序列化,所以它会在服务无法处理(?)的代码中抛出错误,从而生成一个错误,该错误不能正确地传达给消费者,也不能提供带有正文的正确 500 和没有对服务应用正确的权限。这是 .Net Core 问题,不是代码问题。

    【讨论】:

      猜你喜欢
      • 2015-01-25
      • 2011-07-26
      • 2013-03-02
      • 1970-01-01
      • 2012-05-18
      • 2012-04-15
      • 2019-04-14
      • 2013-11-25
      • 1970-01-01
      相关资源
      最近更新 更多