代码之家  ›  专栏  ›  技术社区  ›  Neil Grant

为什么这个Fetch命令不能连接到API?测试服务器上返回401错误,实时站点上的脚本错误

  •  0
  • Neil Grant  · 技术社区  · 5 年前

    我正在尝试使用Fetch访问API。我不能从头开始编写代码,所以我将这些源代码拼凑在一起,包括API文档源代码:

        <script type="text/javascript">
    
              const url = 'https://apis.apprenticeships.sfa.bis.gov.uk/vacancies/v1/apprenticeships/search?standardLarsCodes=465';
    
              var myHeaders = new Headers({
                'Ocp-Apim-Subscription-Key':'xxxxxxxxxxxxxxxxxxxxxxxxx',
                'Host':'apis.apprenticeships.sfa.bis.gov.uk',
                'Access-Control-Allow-Origin':'xxxxxxxxxxxxxxxxxxxxxx'
              });
    
              fetch(url, {
                mode: 'no-cors',
                withCredentials:true,
                headers: myHeaders
              })
    
              .then(function(response) {
                data: "{body}"
              })
    
              .catch(function(error) {
                console.log('Looks like there was a problem: \n', error);
              });
    
            </script>
    

    以下是API文档提供的示例代码(在HTML头中使用Ajax):

        $(function() {
            var params = {
                // Request parameters
            };
    
            $.ajax({
                url: "https://apis.apprenticeships.sfa.bis.gov.uk/vacancies/v1/apprenticeships/{vacancyReference}?" + $.param(params),
                beforeSend: function(xhrObj){
                    // Request headers
                    xhrObj.setRequestHeader("Ocp-Apim-Subscription-Key","{subscription key}");
                },
                type: "GET",
                // Request body
                data: "{body}",
            })
            .done(function(data) {
                alert("success");
            })
            .fail(function() {
                alert("error");
            });
        });
    

    当我从Wordpress网站运行代码时,我收到以下错误:

    未捕获SyntaxError:意外标记“<”

    当我从本地测试服务器运行时,我得到:

    加载资源失败:服务器的响应状态为401(拒绝访问)

    你能指出我哪里做错了吗?

    0 回复  |  直到 5 年前
        1
  •  0
  •   Neil Grant    5 年前

    因此,我的浏览器需要一个“Access Control Allow Origin”响应头才能访问JSON数据。我正在从第三方服务器请求数据,在那里我无法修改后端配置,所以我选择了使用CORS代理的解决方案:

    No 'Access-Control-Allow-Origin' header is present on the requested resource—when trying to get data from a REST API