没有来自使用jQuery的Wikipedia API调用的响应

时间:2016-05-16 05:52:19

标签: jquery json wikipedia-api

我有一个jQuery API调用,但没有给我任何回复。这是代码:

$(document).ready(function() {
  $("#form").submit(function() {

    var apiCall = "https://en.wikipedia.org/w/api.php?action=query&format=json&prop=info|extracts&generator=search&callback=?&inprop=url&exsentences=3&gsrsearch=" + $("#searchTerm").val();

    $.getJSON(apiCall, function(data) {
    console.log(data);
      });

    });

  });

我已设法使用此网址获得回复:https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&utf8=1&srsearch=" + $("#searchTerm").val() + "&callback=?"

问题在于我希望能够使用返回的每个网页的网址,而上述API调用仅提供标题和摘要,但没有网址。

根据MediaWiki(在沙箱中验证),确实提供URL的API调用是顶部代码示例中的API调用:https://en.wikipedia.org/w/api.php?action=query&format=json&prop=info|extracts&generator=search&callback=?&inprop=url&exsentences=3&gsrsearch=" + $("#searchTerm").val()

但在我的代码中,它并没有返回任何内容。您可以在https://codepen.io/khaledallen/pen/VaNGMa?editors=1011

中查看整个过程

任何指导都将受到赞赏(这也是我的第一个stackoverflow问题,因此任何关于问题礼仪的指导都是有帮助的。)

2 个答案:

答案 0 :(得分:0)

当您提交表单时,它实际上会应用浏览器定义的默认行为,这意味着它会将您重定向到表单的action属性。实际上,由于action设置为#,因此页面只是刷新。

要解决此问题,您应该只使用以下命令来阻止默认行为:

$(document).ready(function() {
    $("#form").submit(function(e) {
        e.preventDefault();

将事件对象作为参数添加到提交事件处理程序(e),并在其上应用preventDefault方法。

查看此codepen:https://codepen.io/anon/pen/PNgMGW?editors=1011

答案 1 :(得分:0)

我明白了。

  1. MediaWiki沙箱生成的URL似乎用UTF-8代码替换特殊字符,但它无法读取它们(?)。我将URL中的所有内容更改为常规字符,并且工作正常。
  2. 添加format=2选项有帮助。这是mediawiki(https://www.mediawiki.org/wiki/API:JSON_version_2
  3. 中的JSON格式选项之一
  4. 这是返回标题和网址的网址:https://en.wikipedia.org/w/api.php?action=query&format=json&prop=info&generator=search&callback=?&utf8=1&formatversion=2&inprop=url&gsrsearch=Sophia&gsrprop=snippet"
  5. 我无法显示网址和摘录/摘要,因此这只是部分解决方案。