【问题标题】:CORS error with ajax request [duplicate]ajax请求的CORS错误[重复]
【发布时间】:2023-03-21 11:58:01
【问题描述】:

我在 ajax 中执行此请求,但我仍然有以下关于 CORS 的错误: XMLHttpRequest 无法加载 https://cubber.zendesk.com/api/v2/organizations/37520251/users.json。预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin。 你能帮我吗(我看过很多话题,但我仍然不明白为什么它不起作用

 function afficheorga(a){
      $.ajax({
          url: "https://cubber.zendesk.com/api/v2/users/"+a+"/organizations.json",
          type: 'GET',
          dataType: 'json',
          cors: true ,
          contentType:'application/json',
          secure: true,
                    headers: {
                        'Access-Control-Allow-Origin': '*',
                    },
          beforeSend: function (xhr) {
              xhr.setRequestHeader ("Authorization", "Basic " + btoa(""));
          },
          success: function (data){
            console.log(data.organizations[0].name);
            var organisation = data.organizations[0].name;
            $("#company").text(organisation);
          }
        })
    }

【问题讨论】:

  • 服务器似乎不支持 CORS。服务器响应中缺少“Access-Control-Allow-Origin”标头。您还可以通过添加自定义标头来触发预检请求。
  • Zen Desk API 说:“CORS 请求仅支持端点,例如不需要身份验证的帮助中心搜索。任何需要身份验证的端点都不支持 CORS 请求。”见:Core API - Introduction

标签: javascript ajax cross-domain


【解决方案1】:

您可以使用jsonp 解决此问题。将dataType 更改为jsonp,因此您的GET 请求应如下所示

function afficheorga(a){
      $.ajax({
          url: "https://cubber.zendesk.com/api/v2/users/"+a+"/organizations.json",
          type: 'GET',
          dataType: 'jsonp',
          cors: true ,
          contentType:'application/json',
          secure: true,
          headers: {
            'Access-Control-Allow-Origin': '*',
          },
          beforeSend: function (xhr) {
            xhr.setRequestHeader ("Authorization", "Basic " + btoa(""));
          },
          success: function (data){
            console.log(data.organizations[0].name);
            var organisation = data.organizations[0].name;
            $("#company").text(organisation);
          }
      })
}

【讨论】:

  • 好吧,这删除了我关于跨源的错误,但我的请求 API 不接受“jsonp”,所以我不能使用它
  • 数据类型“jsonp”即使在进行了适当的身份验证后也会给出 401 未授权错误。有什么办法吗?