如何使用jquery和维基百科API

时间:2016-08-22 10:39:53

标签: javascript jquery json ajax wikipedia-api

我已经阅读了很多帖子,旧的,新的和维基百科文档。

我有这个请求可以在sanbox中自行运行:

但是当我尝试在javascript脚本中使用它时,我无法获取数据:

我尝试了ajax和Json:

这是我使用的代码:

  • 使用ajax的'GET'请求:

代码标记很糟糕

function build_wiki_search_url(pattern) {
    var base_url = "https://en.wikipedia.org/w/api.php";
    var request_url = "?action=query&format=json&list=search&srsearch=";
    var url = base_url + request_url + pattern;
    return url;
}

 $(document).ready(function() {
    $("#doit").click(function() {
        console.log("Submit button clicked");
        var pattern = $("#search").val();
        var url = build_wiki_search_url(pattern);
        console.log(url);
    $.ajax( {
        type: "GET",
        url: url,
        dataType: 'jsonp',
        success: function(data) {
            console.log(data);
        },
        error: function(errorMessage) {
             console.log("damnn");
          }
        });
      console.log("end");
    });
 })
  • 在维基百科文档后面带有ajax的'POST'请求

      var base_url = "https://en.wikipedia.org/w/api.php";
      $.ajax( {
         contentType: "application/json; charset=utf-8",
          url: base_url,
          data: {
              action: 'query',
              list: 'search',
              format: 'json',
              srsearch: 'einstein',
              origin: '*',
         },
          dataType: 'json',
          type: 'POST',
          success: function(data) {
              console.log("ok");
    
              // do something with data
          },
          error: function(errorMessage) {
              console.log("damnn");
          }
      } );
    
  • 和getJSON尝试:

    //getJSON atempt.
      console.log(url +  '&callback=?');
      $.getJSON(url + '&callback=?', function(json) {
            console.log("ok");
            }); 
    

以下是我的控制台中的输出:

Submit button clicked    
https://en.wikipedia.org/w/api.php?action=query&format=json&list=search&srsearch=einstein
script.js 
end

1 个答案:

答案 0 :(得分:0)

问题来自html:

<form > 
  <input type="text" id="search"> <button id="doit"> Search!!</button>
</form>

由于按钮处于表单中,因此该按钮的正常行为是生成提交操作。所以我的想法是用以下方法禁用这种正常行为:

$("#doit").click(function(e) {
    e.preventDefault();

完整的工作代码:

function build_wiki_search_url(pattern) {
    var base_url = "https://en.wikipedia.org/w/api.php";
    var format = "&format=json";
    var request_url = "?action=query&format=json&list=search&srsearch=";
    var url = base_url + request_url + pattern;
    return url;
}
$(document).ready(function() {
    $("#doit").click(function(e) {
        e.preventDefault();
        console.log("Submit button clicked");
        var pattern = $("#search").val();
        var url = build_wiki_search_url(pattern);
        $.ajax( {
            type: "GET",
            url: url,
            dataType: 'jsonp',
            success: function(data) {
                console.log(data.query.searchinfo.totalhits);
            },
            error: function(errorMessage) {
                 console.log("damnn");
              }
        });
    });
})