如何使用 Javascript 和 Ajax 从 API 获取数据?

Posted

技术标签:

【中文标题】如何使用 Javascript 和 Ajax 从 API 获取数据?【英文标题】:How do I get the data from API using Javascript and Ajax? 【发布时间】:2021-12-19 21:13:24 【问题描述】:

当我在输入中写一些东西然后按搜索时,我想从包含该词的电影中获取标题,我该怎么做?我正在使用 omdb API。例如,如果我搜索“蝙蝠侠”,我想获取所有包含“蝙蝠侠”的电影标题。现在,当我搜索蝙蝠侠时,我只会得到一部蝙蝠侠电影。

document.getElementById("getForm").addEventListener("submit", (e) => 
    e.preventDefault();
    loadMovies(document.querySelector("input[name='query']").value);
  );
  
  function loadMovies(name) 
    var omdbAPI = new XMLHttpRequest();
    var omdbURL = `http://www.omdbapi.com/?t=$name.replace(" ", "%20")&type=movie&apikey=`;
    omdbAPI.open("get", omdbURL, true);
  
    omdbAPI.onload = function(event) 
      event.preventDefault();
  
      if (this.status == 200) 
        var result = JSON.parse(this.responseText);
  
        console.log(result);
  
        var output = "";
          output +=
            '<div class="user">' +
            '<h3>Titel: ' + result.Title + '</h3>' +
            '<p>Year: ' + result.Year + '</p>' +
            '</div>';
        document.getElementById('result').innerhtml = output;
       else 
        alert("No results");
      
    
  
    omdbAPI.send();
  
<form action="" method="get" id="getForm">
  Movie: <input type="text" name="query">
  <button type="submit">Search</button>
</form>

<div id="result">
            
</div>

【问题讨论】:

【参考方案1】:

您没有得到任何结果,因为 OMDB 需要 API 密钥,而您没有提供。发送正确的 GET 请求时,您会收到以下响应:"Response":"False","Error":"No API key provided."

您还通过允许发生默认表单提交操作来重新加载页面,而不是使用event.preventDefault() 在表单提交发生时取消页面重新加载,然后调用您的函数。我修改了您的函数以包含要搜索的名称参数。下面应该完成你想要的,但由于你没有 API 密钥,你仍然不会得到任何结果。前往here,获取 API 密钥。

document.getElementById("getForm").addEventListener("submit", (e) => 
  e.preventDefault();
  loadMovies(document.querySelector("input[name='query']").value);
);

function loadMovies(name) 
  var omdbAPI = new XMLHttpRequest();
  var omdbURL = `http://www.omdbapi.com/?t=$name.replace(" ", "%20")&type=movie`;
  omdbAPI.open("get", omdbURL, true);

  omdbAPI.onload = function(event) 
    event.preventDefault();

    if (this.status == 200) 
      var result = JSON.parse(this.responseText);

      console.log(result);

      var output = "";
      for (var i in result) 
        output +=
          '<div class="user">' +
          '<h3>Titel: ' + result.Title + '</h3>' +
          '</div>';
      
      document.getElementById('result').innerHTML = output;
     else 
      alert("No results");
    
  

  omdbAPI.send();
<form action="" method="get" id="getForm">
  Movie: <input type="text" name="query">
  <button type="submit">Search</button>
</form>

<div id="result">

</div>

【讨论】:

以上是关于如何使用 Javascript 和 Ajax 从 API 获取数据?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用ajax将数据从视图发送到控制器laravel?

如何使用 JavaScript 和 AJAX 根据邮政编码自动填充城市和州?

如何使用 javascript / jQuery 获取数据 ajax api 数组?

如何在javascript中将数组从php返回到ajax响应

如何从 Ajax 或 JavaScript 调用 Struts1 Action?

如何使用 PHP 和 Ajax 将数组传递给 Javascript?