否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost:1337'因此不允许访问。
我的代码很简单:
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在我的本地主机上。任何帮助将不胜感激。
答案 0 :(得分:5)
您显然正在尝试跨域Ajax请求。这意味着您正在尝试联系与原始网页所在的域/端口不同的域/端口上的服务器。这称为交叉原始请求,默认情况下不允许。您可以阅读有关浏览器的相同原始安全策略here。
为了允许直接发出跨域请求,您提出请求的服务器必须明确允许它。
Access-Control-Allow-Origin
标头是允许此类访问的一种方式,但它显然没有应用该标头,因此浏览器拒绝了该请求。您可以阅读CORS(跨源资源共享)如何工作here。
制作跨源请求的其他方法是使用JSONP(还需要目标服务器的协作以支持JSONP请求)或通过代理(允许您联系的另一个服务器,可以向所需的服务器发出请求)你并将结果归还给你。代理在您有权访问的服务器上需要您自己的服务器代码,但不需要目标服务器的协作。
Per the doc on this page,Markit On Demand似乎支持JSONP,因此您可以将该表单用于跨源请求。如果为dataType: "jsonp"
设置适当的$.ajax()
选项,jQuery的ajax支持该格式。
答案 1 :(得分:0)
正在查看此消息,因为服务器不允许通过Ajax提供跨源资源。因此,如果服务器支持,请让服务器管理员为您启用cors或尝试使用JSONP。