2

这个 API 请求除了状态代码“0”之外没有得到任何东西,我无法弄清楚它有什么问题。浏览器上的 console.log 显示“对预检的响应无效(重定向)”,但如果我只是将网站 url 添加到浏览器中,我就可以访问它。我提出请求的方式一定有问题,但我无法弄清楚。这是代码。

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”,您看到“对预检请求的响应未通过访问控制检查:没有 'Access-Control-Allow-Origin'请求的资源上存在标头。因此,不允许访问源“ http://s.codepen.io ”。”

我不确定它是语法,我构建请求的方式还是什么,但是在 stackoverflow 和谷歌上尝试了两天的不同解决方案之后,我仍然一无所获。万一有人想看到我在这里遇到困难的实际网站http://codepen.io/Ramins01/pen/rxExKw

4

1 回答 1

2

XMLHttpRequest 受同源策略限制。不过,有几种不同的方法可以从另一个域获取数据。在这种情况下,最简单的可能是将JSONP 与 jQuery一起使用。维基百科 API 支持 JSONP。

这是一个使用 JSONP的Wikipedia opensearch 查询示例: 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);

        }
});
于 2016-02-24T06:06:02.293 回答