我正在从我的asp.net表单中调用此函数,并在调用ajax时在firebug控制台上收到以下错误。
阻止跨源请求:同源策略禁止在http://anotherdomain/test.json读取远程资源。 (原因:缺少CORS标题'Access-Control-Allow-Origin'。
var url= 'http://anotherdomain/test.json';
$.ajax({
url: url,
crossOrigin: true,
type: 'GET',
xhrFields: { withCredentials: true },
accept: 'application/json'
}).done(function (data) {
alert(data);
}).fail(function (xhr, textStatus, error) {
var title, message;
switch (xhr.status) {
case 403:
title = xhr.responseJSON.errorSummary;
message = 'Please login to your server before running the test.';
break;
default:
title = 'Invalid URL or Cross-Origin Request Blocked';
message = 'You must explictly add this site (' + window.location.origin + ') to the list of allowed websites in your server.';
break;
}
});
我已经采取了替代方式,但仍无法找到解决方案。
注意:我没有服务器权限来进行服务器端(API / URL)更改。
答案 0 :(得分:46)
当您尝试访问其他域的资源时,通常会发生这种情况。
这是一项安全功能,可以避免每个人自由访问该域的任何资源(可以访问该域,例如在盗版域上拥有完全相同的网站副本)。
响应的标题,即使它是200OK也不允许其他来源(域,端口)访问资源。
如果您是两个域的所有者,则可以解决此问题:
要更改此设置,您可以在请求的域文件的.htaccess中写入此内容:
<IfModule mod_headers.c>
Header set Access-Control-Allow-Origin "*"
</IfModule>
如果将此设置为所请求文件的响应标头,您将允许每个人访问资源:
Access-Control-Allow-Origin : *
OR
Access-Control-Allow-Origin : http://www.my-domain.com
和平与代码;)
答案 1 :(得分:6)
,添加:
dataType: "jsonp",
后行:
type: 'GET',
应该解决这个问题..
希望这能帮到你
答案 2 :(得分:3)
您必须修改服务器端代码,如下所示
public class CorsResponseFilter implements ContainerResponseFilter {
@Override
public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
throws IOException {
responseContext.getHeaders().add("Access-Control-Allow-Origin","*");
responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
}
}
答案 3 :(得分:1)
服务器端将其放在.php之上:
header('Access-Control-Allow-Origin: *');
您可以设置特定的域限制访问权限:
header('Access-Control-Allow-Origin: https://www.example.com')
答案 4 :(得分:0)
在完成上述答案后,你一定知道为什么会遇到这个问题。
self.send_header('Access-Control-Allow-Origin', '*')
您只需在服务器端添加上述行。
答案 5 :(得分:0)
这对我有用:
创建 php 文件,无需使用 js 即可下载另一个域页面的内容:
<?
//file name: your_php_page.php
echo file_get_contents('http://anotherdomain/test.json');
?>
然后在ajax(jquery)中运行。示例:
$.ajax({
url: your_php_page.php,
//optional data might be usefull
//type: 'GET',
//dataType: "jsonp",
//dataType: 'xml',
context: document.body
}).done(function(data) {
alert("data");
});
答案 6 :(得分:0)
紧急情况下,您可以使用此 Chrome 扩展程序在本地浏览器上禁用 CORS。
答案 7 :(得分:-11)
您的浏览器不允许您的请求.. 您需要在网络浏览器上安装插件
适用于Firefox https://addons.mozilla.org/en-US/firefox/addon/cors-everywhere/
最佳方式 你可以在服务器端添加标题
Access-Control-Allow-Origin:*