Access-Control-Allow-Origin错误试图获取json

时间:2011-03-17 22:32:28

标签: ajax get cors

我正在尝试使用Bing API来提取拼写建议,但不断收到以下错误:

XMLHttpRequest无法加载http://api.search.live.net/json.aspx?Appid=myIdWasHere&query=explotion&sources=spell。 Access-Control-Allow-Origin

不允许原点http://myWebServerNameWasHere

我读了几篇看起来很相似的帖子,然后是关于CORS的,但我还是有点模糊。我在下面的代码中有什么问题?

$.ajax({
  type: 'GET',
  url: 'http://api.search.live.net/json.aspx',
  dataType: 'json',
  data: {
        Appid: '<myIdWasHere>',
        query: 'explotion',
        sources: 'spell'
        },
  beforeSend: function(xhr){
         xhr.setRequestHeader("Access-Control-Allow-Origin", "*");
    }, 
  success: function(data) {    
    alert(data);
    },
  error: function(msg) {    
    alert(this.url + " -Failed"));
  }
});  

2 个答案:

答案 0 :(得分:1)

CORS(http://www.w3.org/TR/cors/)是一种使用XmlHttpRequest创建跨域请求的新方法。由于您要从您的域向api.search.live.net发出请求,因此它被视为跨域请求。 CORS需要服务器端支持才能工作;具体而言,Bing需要包含一个特殊标头,指示允许跨域请求。

我的猜测是Bing API不允许跨域请求。为了提出请求,您应该考虑使用JSON-P(http://en.wikipedia.org/wiki/JSON#JSONP)。从他们的文档来看,Bing似乎支持JSON-P。查看此处的“回调枚举示例”部分:

http://msdn.microsoft.com/en-us/library/dd250846.aspx

答案 1 :(得分:0)

旧帖子,但Access-Control-Allow-Origin应该在服务器上,而不是客户端/主叫域。