以下简单代码不适用于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没有返回任何内容。
出了什么问题&我该如何解决这个问题?
答案 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");
});