如何将OMDb API的结果划分为表格?

时间:2016-04-26 09:10:07

标签: javascript database

我目前正在使用OMDb API并设法从中获取一些数据。现在我正在通过标题和发行年份搜索电影数据库,并且能够让演员进入一个"块"。

以下是我面临的两个问题:

  1. 如何将所有演员分成他们自己的表行?
  2. 是否可以仅限制搜索电视剧并替换“年”。与季节'还是这样?
  3. 我的 JavaScript

    $(function(){
      var $Search = $('form'), $Results = $('#results');
      $Results.hide();
    
      $Search.on('submit', function(p_oEvent){
        var sUrl, sMovie, sYear, oData;
        p_oEvent.preventDefault();
        sMovie = $Search.find('#title').val();
        sYear = $Search.find('#year').val();
        sUrl = encodeURI('http://www.omdbapi.com/?t=' + sMovie + '&y=' + sYear +     '');
    
        $.ajax(sUrl, {
          complete: function(p_oXHR, p_sStatus){
            oData = $.parseJSON(p_oXHR.responseText);
            console.log(oData);
            $Results.find('.actors').text(oData.Actors);
            $Results.show();
          }
        });
      });
    });
    

    我的 HTML 所有内容都已打印出来:

    <div id="browse">
      <h1>Search for a TV-Series</h1>
      <form>
        <label>
            <input id="title" type="text" name="series" placeholder="Name of the Series" />
            <input id="year" type="text" name="year" placeholder="Year" />
        </label>
        <button>Go!</button>
      </form>
    </div>
    
    <div id="results">
      <table>
        <tr class="heading">
          <th>Actors</th>
        </tr>
        <tr>
          <td class="actors"></td>
        </tr>
      </table>
    </div>
    

    欢迎任何帮助和建议!

2 个答案:

答案 0 :(得分:2)

要在自己的行上显示每个actor,您需要split API返回的逗号分隔的actor字符串,遍历列表,并将每个actor附加到页面。这是一个jsfiddle

<强> HTML

<div id="browse">
  <h1>Search for a TV-Series</h1>
  <form>
    <label>
        <input id="title" type="text" name="series" placeholder="Name of the Series" />
        <input id="year" type="text" name="year" placeholder="Year" />
    </label>
    <button>Go!</button>
  </form>
</div>
<div id="results">
  <table></table>
</div>

<强>的JavaScript

$(function(){
  var $Search = $('form'), $Table = $('table');
  $Table.hide();

  $Search.on('submit', function(p_oEvent){
    var actors = [], sUrl, sMovie, sYear, oData;
    p_oEvent.preventDefault();
    sMovie = $Search.find('#title').val();
    sYear = $Search.find('#year').val();
    sUrl = encodeURI('https://www.omdbapi.com/?t=' + sMovie + '&y=' + sYear +     '');

    $.ajax(sUrl, {
      complete: function(p_oXHR, p_sStatus){
        oData = $.parseJSON(p_oXHR.responseText);
        actors = oData.Actors.split(',');

        $Table.html(
           '<tr class="heading"><th>Actors</th></tr>'
        );
        actors.forEach(function(actor) {
            $Table.append(
               '<tr><td class="actors">' + actor + '</td</tr>'      
            );
        });
        $Table.show();
      }
    });
  });
});

要回答您的第二个问题,是的,可以按季节和电视剧搜索。以下是一个例子。

http://www.omdbapi.com/?t=Game%20of%20Thrones&Season=2&Episode=1&type=series

此API调用的问题是您必须按Episode搜索,我想您可能想知道整个季节中的每个角色。为此,您必须在没有Episode参数的情况下进行API调用,然后使用返回的id来检索每一集。

答案 1 :(得分:0)

  1. 正如评论中提到的@Jamesking56,您只需要从响应中迭代演员,并为每个演员创建新的表行。但是,从我看到的,演员返回一个字符串。因此,你需要通过&#34;,&#34;来分割演员。分隔符,并遍历生成的数组。请参阅JS String split()JS Array forEach()

  2. 您可以在OMDb API Changelog中看到可以搜索特定的季节和剧集:

      

    5/10/15季节+剧集搜索参数已添加:http://www.omdbapi.com/?t=Game of Thrones&Season=1&Episode=1

    所以请按照您的意愿使用它。我不知道是否可以将搜索仅限于电视剧,但是&#34;季节&#34;绝对不会用于电影,所以你应该只使用该查询获得系列。