维基百科API"预检无效"

时间:2016-02-22 03:51:16

标签: api wikipedia preflight

此API请求除了状态代码' 0'之外不会获得任何其他请求。而我无法弄清楚它有什么问题。浏览器上的console.log读取 "预检的响应无效(重定向)" ,但如果我只是将网站网址添加到浏览器中我可以访问它。我提出要求的方式一定有问题,但我无法弄清楚。这是代码。



var authKey = "http://en.wikipedia.org/w/api.php?action=centralauthtoken&format=json";
  
  var xhr = new XMLHttpRequest();
 
  xhr.open("GET", authKey, true);
  xhr.setRequestHeader('Api-User-Agent', 'http://s.codepen.io');
  xhr.send();    
  var xmlDocument = xhr.response;
  console.log(xhr.status);
  console.log(xhr.statusText);




我也改变了http'到' https'但我仍然得到' 0' 0只有这次你在控制台上看到 "对预检请求的响应没有通过访问控制检查:否' Access-Control-Allow-Origin'标头出现在请求的资源上。起源' http://s.codepen.io'因此不允许访问。"

我不确定它的语法,我构建请求的方式,或者在stackoverflow和google上尝试不同的解决方案两天后,我仍然无处可去。任何人都希望看到我在这里遇到问题的实际网站http://codepen.io/Ramins01/pen/rxExKw

1 个答案:

答案 0 :(得分:2)

XMLHttpRequest受same-origin policy的限制。但是,有一个few different ways来从另一个域获取数据。在这种情况下最简单的可能是使用JSONP with jQuery。 Wikipedia API支持JSONP。

以下是使用JSONP的Wikipedia opensearch query示例:http://codepen.io/slaporte/pen/ZQgjQj

var search_term = 'Coffee';
var api_url = "https://en.wikipedia.org/w/api.php";

$.ajax({url: api_url,
        dataType: 'jsonp',
        jsonp: 'callback',
        data: {action: 'opensearch',
               search: search_term,
               limit: 5,
               format: 'json'},
        success: function(response) {

          // Now you have search results!
          console.log(response);

        }
});