json 和 jquery 请求的资源错误中不存在“Access-control-allow-origin”标头

Posted

技术标签:

【中文标题】json 和 jquery 请求的资源错误中不存在“Access-control-allow-origin”标头【英文标题】:No 'Access-control-allow-origin' header is present on the requested resource error with json and jquery 【发布时间】:2016-09-29 12:26:36 【问题描述】:

我使用了不同服务器上的 API,但我认为出现了 CORS 错误。奇怪的是它首先运行没有问题,然后我收到了这个错误消息

XMLHttpRequest cannot load http://www.thecocktaildb.com/api/json/v1/1/random.php? tagmode=any&type=POST&format=jsonp. No 'Access-Control-Allow-Origin' header   is present on the requested resource. Origin 'myadress.com' is   therefore not allowed acces

我添加了crossDomain: "true",它工作了一天。现在它不再起作用了,我已经搜索并尝试了很多我找到的解决方案。但没有任何效果。有什么问题,我该如何解决?尝试jsonp 而不是json 有和没有type:post 和&callback=?什么也没做。我什至为 chrome 安装了 CORS 启用扩展。但总是同样的错误,我无法控制 API 本身或托管它的服务器。我怎样才能解决这个问题?下面是我的代码。

        function random() 
        $(document).ready(function () 
            $.getJSON("http://www.thecocktaildb.com/api/json/v1/1/random.php", 
                tagmode: "any",
                type: "POST",
                format: 'jsonp',
                crossDomain: "true"
            , function (data) 
                console.log(data);

                var result = "";
                $.each(data.drinks, function (index, value) 
                    result += "<p>" + value.idDrink + "<p>";
                    result += "<p>" + value.strDrink + "<p>";
                );
                $('#result').html(result);
                console.log(result);
            );
        );
    

【问题讨论】:

该站点没有设置标题,因此您无能为力。服务器端代理是您需要的。 服务器不返回 jsonp BUT json。然后你应该使用你自己的服务器来代理请求 【参考方案1】:

我认为您可以对绕过 CORS 错误进行一些修改。但目标环境也可以阻止 CORS 请求。当我使用 Paypal 结帐时,我遇到了同样的问题。 Paypal 环境不接受 CORS 请求。

这样您就可以尝试在服务器端进行此调用。

【讨论】:

【参考方案2】:

如果我理解正确,您正在对与您的页面所在的域不同的域执行AJAX call。因此浏览器会阻止它,因为出于安全原因,它通常允许同一来源的请求。当您想要进行跨域请求时,您需要做一些不同的事情。关于如何实现这一点的教程是使用CORS。

普通网页可以使用XMLHttpRequest对象发送和 从远程服务器接收数据,但它们受到相同的限制 原产地政策。扩展并没有那么有限。分机可以交谈 其来源之外的远程服务器,只要它首先请求 跨域权限。

解决方案:

仅允许访问特定域:

response.addHeader("Access-Control-Allow-Origin", "http://www.thecocktaildb.com");

检查此blog post。

【讨论】:

以上是关于json 和 jquery 请求的资源错误中不存在“Access-control-allow-origin”标头的主要内容,如果未能解决你的问题,请参考以下文章

AWS SAM:请求的资源响应中不存在“Access-Control-Allow-Origin”标头

请求的资源上不存在 Jquery-No 'Access-Control-Allow-Origin' 标头

命名空间错误中不存在类型资源

对预检请求的响应未通过访问控制检查:请求的资源中不存在“Access-control-Allow-Origin”标头

代码在读取 JSON 时返回错误,并且 BigQuery SQL 的 JSON 结构中不存在引用的部分

命名空间错误中不存在类型资源