无法使用Wikipedia API调用获取随机JSON对象属性

时间:2017-05-20 15:41:14

标签: javascript jquery json wikipedia-api

我正在尝试编写一个小维基百科客户端,除其他外,它可以通过维基百科API从随机文章中获取一个片段。我想通过使用jQuery从此API调用中提取随机文章来实现此目的:https://en.wikipedia.org/w/api.php?action=query&generator=random&grnnamespace=0&prop=extracts&exchars=500&format=jsonfm

问题是我不知道要调用什么来获取标题并在返回的JSON对象中提取。如果我调用我的对象result,那么我基本上需要访问result.query.pages.(thepageid).titleresult.query.pages.(thepageid).extract,但由于pageid是随机的,我不知道写什么而不是(thepageid) - 我已经尝试过result.query.pages [0],但这似乎不起作用。

有关如何处理此事的任何想法?

3 个答案:

答案 0 :(得分:0)

使用jQuery,您可以执行$.getJSON()并提取titleextract,如下所示:

$.getJSON('https://en.wikipedia.org/w/api.php?action=query&generator=random&grnnamespace=0&prop=extracts&exchars=500&format=json&callback=?', function(response) {
    var pages = response.query.pages,
        id = Object.keys(pages)[0],
        randomPage = pages[id];

    console.log(randomPage.title);
    console.log(randomPage.extract);
});
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:0)

如果可用,您可能希望在<script> var linkHome; function validateform() { var uid = document.getElementById("form1").elements[0].value; var pwd = document.getElementById("form1").elements[1].value; if (uid === "admin" && pwd === "admin") { document.getElementById("demo1").innerHTML = "Found elements in the form."; linkHome = "/MenuDemo1/src/adminHome.jsp"; } else { linkHome = "/MenuDemo1/src/userHome.jsp"; } location.href = linkHome; } </script> 上使用Object.values。这将为您提供包含result.query.pages键的对象列表。

extract

其他解决方案,有更多的ID到值对,你可以迭代

// first element 
var page = Object.values(result.query.pages)[0];
console.log(page.title);

答案 2 :(得分:0)

使用formatversion=2

&#13;
&#13;
$.getJSON('https://en.wikipedia.org/w/api.php?action=query&generator=random&grnnamespace=0&prop=extracts&exchars=500&format=json&formatversion=2&callback=?', function(response) {
    console.log(response.query.pages[0].extract);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;