维基百科API Hello World无法正常工作?

时间:2017-01-24 08:29:26

标签: javascript jquery getjson wikipedia-api mediawiki-api

以下简单代码不适用于Wikipedia API。我不确定为什么。

HTML:

function doThis() {
var wikiUrl = "https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json";
$.getJSON(wikiUrl, function(data) {
  alert(data);
}, 
  $('#result').html("no")
)}

脚本:

$('#result').html("no")

输出: {{1}}行被执行,我相信这意味着getJSON没有返回任何内容。

出了什么问题&我该如何解决这个问题?

2 个答案:

答案 0 :(得分:3)

如果您打开浏览器的控制台,则会看到以下错误:

  

XMLHttpRequest无法加载https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许原点“https://s.codepen.io”访问。

这表示您需要指示$.getJSON()使用jsonp

为此,只需添加

即可
&callback=?

到您的网址。

但是,正如@Rory评论的那样,请注意:

请注意,JSON和JSONP不能直接互换。这仅适用于维基百科支持JSONP,而许多API提供商不支持JSONP。

将代码更改为

function doThis() {

    var wikiUrl = "https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json&callback=?";

    $.getJSON(wikiUrl, function(data) {
        alert(data);
    }); 
)}

会奏效。

请注意$('#result').html("no")不是回调,因此将其作为一个回调没有任何正面效果。

答案 1 :(得分:1)

除了错误回调错误外,您在通话时遇到一些CORS问题。

尝试

$.getJSON('https://en.wikipedia.org/w/api.php?action=query&titles=Main%20Page&prop=revisions&rvprop=content&format=json&callback=?', function(data) {
   alert(data);
}, function() {
  $('#result').html("no");
});