$.getJSON 请求没有 'Access-Control-Allow-Origin' header
No 'Access-Control-Allow-Origin' header on $.getJSON request
我正在尝试向以下 URL 发出一个简单的 $.getJSON
请求:
http://dev.markitondemand.com/Api/v2/InteractiveChart/json?parameters=%7B%22Normalized%22%3Afalse%2C%22NumberOfDays%22%3A7%2C%22DataPeriod%22%3A%22Day%22%2C%22Elements%22%3A%5B%7B%22Symbol%22%3A%22NUS%22%2C%22Type%22%3A%22price%22%2C%22Params%22%3A%5B%22c%22%5D%7D%5D%7D
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1337' is therefore not allowed access.
我的代码非常简单:
var ticker = "CRR";
var url = "http://dev.markitondemand.com/Api/v2/InteractiveChart/json?parameters=%7B%22Normalized%22%3Afalse%2C%22NumberOfDays%22%3A7%2C%22DataPeriod%22%3A%22Day%22%2C%22Elements%22%3A%5B%7B%22Symbol%22%3A%22" + ticker + "%22%2C%22Type%22%3A%22price%22%2C%22Params%22%3A%5B%22c%22%5D%7D%5D%7D";
$.getJSON(url, function(data) {
console.log(data);
}).success(function() {
$('#show-data').html("Successfully retrieved data.");
}).error(function() {
$('#show-data').html("Service Unavailable.");
});
这不是 运行 任何错误或成功函数,当我尝试 $.ajax
时我得到了同样的结果。就我的设置而言,我正在试验 MEN 项目,因此 Mongo、Express 和 Node.js 在我的本地主机上。任何帮助将不胜感激。
看到此消息是因为服务器不允许通过 Ajax 的跨域资源。因此,要么让服务器管理员为您启用 cors,要么尝试使用 JSONP(如果服务器支持)。
您显然是在尝试 cross-origin Ajax 请求。这意味着您正在尝试联系与原始网页所在的 domain/port 不同的服务器。这称为跨源请求,默认情况下是不允许的。您可以阅读浏览器的同源安全策略 here。
为了能够直接发出跨源请求,您向其发出请求的服务器必须特别允许。
Access-Control-Allow-Origin
header 是允许此类访问的一种方式,但显然没有应用 header 因此请求被浏览器拒绝.您可以了解 CORS(跨源资源共享)的工作原理 here。
其他发出跨源请求的方法是使用 JSONP(也需要目标服务器的合作以支持 JSONP 请求)或通过代理(允许您联系的另一台服务器,它可以向所需的目标服务器发出请求)服务器为你和 return 你的结果)。代理需要在您有权访问的服务器上使用您自己的服务器代码,但不需要目标服务器的配合。
根据 the doc on this page,Markit On Demand 似乎确实支持 JSONP,因此您可以将该表单用于跨源请求。如果您为 $.ajax()
.
设置适当的 dataType: "jsonp"
选项,jQuery 的 ajax 支持该格式
我正在尝试向以下 URL 发出一个简单的 $.getJSON
请求:
http://dev.markitondemand.com/Api/v2/InteractiveChart/json?parameters=%7B%22Normalized%22%3Afalse%2C%22NumberOfDays%22%3A7%2C%22DataPeriod%22%3A%22Day%22%2C%22Elements%22%3A%5B%7B%22Symbol%22%3A%22NUS%22%2C%22Type%22%3A%22price%22%2C%22Params%22%3A%5B%22c%22%5D%7D%5D%7D
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:1337' is therefore not allowed access.
我的代码非常简单:
var ticker = "CRR";
var url = "http://dev.markitondemand.com/Api/v2/InteractiveChart/json?parameters=%7B%22Normalized%22%3Afalse%2C%22NumberOfDays%22%3A7%2C%22DataPeriod%22%3A%22Day%22%2C%22Elements%22%3A%5B%7B%22Symbol%22%3A%22" + ticker + "%22%2C%22Type%22%3A%22price%22%2C%22Params%22%3A%5B%22c%22%5D%7D%5D%7D";
$.getJSON(url, function(data) {
console.log(data);
}).success(function() {
$('#show-data').html("Successfully retrieved data.");
}).error(function() {
$('#show-data').html("Service Unavailable.");
});
这不是 运行 任何错误或成功函数,当我尝试 $.ajax
时我得到了同样的结果。就我的设置而言,我正在试验 MEN 项目,因此 Mongo、Express 和 Node.js 在我的本地主机上。任何帮助将不胜感激。
看到此消息是因为服务器不允许通过 Ajax 的跨域资源。因此,要么让服务器管理员为您启用 cors,要么尝试使用 JSONP(如果服务器支持)。
您显然是在尝试 cross-origin Ajax 请求。这意味着您正在尝试联系与原始网页所在的 domain/port 不同的服务器。这称为跨源请求,默认情况下是不允许的。您可以阅读浏览器的同源安全策略 here。
为了能够直接发出跨源请求,您向其发出请求的服务器必须特别允许。
Access-Control-Allow-Origin
header 是允许此类访问的一种方式,但显然没有应用 header 因此请求被浏览器拒绝.您可以了解 CORS(跨源资源共享)的工作原理 here。
其他发出跨源请求的方法是使用 JSONP(也需要目标服务器的合作以支持 JSONP 请求)或通过代理(允许您联系的另一台服务器,它可以向所需的目标服务器发出请求)服务器为你和 return 你的结果)。代理需要在您有权访问的服务器上使用您自己的服务器代码,但不需要目标服务器的配合。
根据 the doc on this page,Markit On Demand 似乎确实支持 JSONP,因此您可以将该表单用于跨源请求。如果您为 $.ajax()
.
dataType: "jsonp"
选项,jQuery 的 ajax 支持该格式