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”标头