维基百科无响应 API 使用 jQuery 调用

No Response from Wikipedia API Call using jQuery

我有一个 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);
      });

    });

  });

我已经设法用这个 URL 得到了回应:https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&utf8=1&srsearch=" + $("#searchTerm").val() + "&callback=?"

问题是我希望能够使用 returned 的每个页面的 URL,而上面的 API 调用只给了我标题和一个片段,但没有 URL.

根据 MediaWiki(已在沙箱中验证),确实提供 URL 的 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().

但在我的代码中它没有 return 任何东西。您可以在 https://codepen.io/khaledallen/pen/VaNGMa?editors=1011

处查看整个操作过程

任何指导将不胜感激(这也是我的第一个 Whosebug 问题,所以任何关于问题礼仪的指导都是有帮助的)。

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

为了解决这个问题,您应该通过简单地使用来防止默认行为:

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

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

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

我想通了。

  1. 似乎由 MediaWiki 沙箱生成的 URL 将特殊字符替换为其 UTF-8 代码,但无法读取它们(?)。我将 URL 中的所有字符都更改为它们的常规字符,并且效果很好。
  2. 添加 format=2 选项有帮助。这是 mediawiki (https://www.mediawiki.org/wiki/API:JSON_version_2)
  3. 中的 JSON 格式选项之一
  4. 这是 URL returns 标题和 URLS: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"

我无法让它显示 URLs 和 extracts/snippets,所以这只是部分解决方案。