No' Access-Control-Allow-Origin' $ .getJSON请求的标头

时间:2015-04-25 07:47:23

标签: jquery ajax json http-headers

我正在尝试向以下网址发出简单的$.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

  

否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' 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在我的本地主机上。任何帮助将不胜感激。

2 个答案:

答案 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。

http://enable-cors.org/server.html