首页 > 解决方案 > JSON在HTML中抛出未定义

问题描述

请帮助我,我是 API 集成的新手,我想从 API url 显示海报、标题和年份。这是我尝试过的代码,当我登录时,它在数组中显示 JSON,但它在前端抛出未定义请帮助。

提前致谢

      <html>
<head>
  <link rel="stylesheet" type="text/css" href="css/style.css">
  <link href="https://fonts.googleapis.com/css?family=Ubuntu" rel="stylesheet">
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

  <title>Welcome</title>

</head>

<body>
    <div class="container">
        <div class="table-responsive">
            <h1>Movies</h1>
            <table class="table table-bordered table-responsive table-striped" id="movies_table">
                <tr>
                    <th>Poster</th>
                    <th>Name</th>
                    <th>Year</th>
                </tr>       

            </table>
        </div>
    </div>
<div id="my_div" class="hide">"Thank You"</div>

</body>
  <script>

  $(document).ready(function(){
           $.getJSON("http://www.omdbapi.com/?apikey=d8ecb486&s=red", function(data) {
                console.log(data);
            var movies = '';
            $.each(data, function(key,value){
              movies += '<tr>';
              movies += '<td>'+value.poster+'</td>';
              movies += '<td>'+value.title+'</td>';
              movies += '<td>'+value.year+'</td>';
              movies += '</tr>';
            });
            $('#movies_table').append(movies);

           });
  });
</script>
</html>

这是API结构

{"Search":[{"Title":"RED","Year":"2010","imdbID":"tt1245526","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMzg2Mjg1OTk0NF5BMl5BanBnXkFtZTcwMjQ4MTA3Mw@@._V1_SX300.jpg"},{"Title":"Red Dragon","Year":"2002","imdbID":"tt0289765","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMTQ4MDgzNjM5MF5BMl5BanBnXkFtZTYwMjUwMzY2._V1_SX300.jpg"},{"Title":"The Hunt for Red October","Year":"1990","imdbID":"tt0099810","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BY2Y5NWVjMmQtMWRmOC00ZTg3LWI3YWQtZGI2MWUwNWQ4OWQ2XkEyXkFqcGdeQXVyNDk3NzU2MTQ@._V1_SX300.jpg"},{"Title":"The Thin Red Line","Year":"1998","imdbID":"tt0120863","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BYjEzMTM2NjAtNWFmZC00MTVlLTgyMmQtMGQyNTFjZDk5N2NmXkEyXkFqcGdeQXVyNzQ1ODk3MTQ@._V1_SX300.jpg"},{"Title":"RED 2","Year":"2013","imdbID":"tt1821694","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMjI2ODQ4ODY3Nl5BMl5BanBnXkFtZTcwNTc2NzE1OQ@@._V1_SX300.jpg"},{"Title":"Red Sparrow","Year":"2018","imdbID":"tt2873282","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMTA3MDkxOTc4NDdeQTJeQWpwZ15BbWU4MDAxNzgyNTQz._V1_SX300.jpg"},{"Title":"Red Eye","Year":"2005","imdbID":"tt0421239","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BNzAxNjc1ODczOF5BMl5BanBnXkFtZTcwMjE3MjEzMw@@._V1_SX300.jpg"},{"Title":"Red Riding Hood","Year":"2011","imdbID":"tt1486185","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMTc4NjYyMzQ5MV5BMl5BanBnXkFtZTcwNjE5Mjc3NA@@._V1_SX300.jpg"},{"Title":"Three Colors: Red","Year":"1994","imdbID":"tt0111495","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BYTg1MmNiMjItMmY4Yy00ZDQ3LThjMzYtZGQ0ZTQzNTdkMGQ1L2ltYWdlL2ltYWdlXkEyXkFqcGdeQXVyMTQxNzMzNDI@._V1_SX300.jpg"},{"Title":"Red Dawn","Year":"2012","imdbID":"tt1234719","Type":"movie","Poster":"https://m.media-amazon.com/images/M/MV5BMjI0MDAwMzA1M15BMl5BanBnXkFtZTcwNzIxMjY3OA@@._V1_SX300.jpg"}],"totalResults":"3993","Response":"True"}

标签: javascriptjqueryhtmljson

解决方案


问题在于您的每个循环,您需要使用 key.poster 而不是value.poster. 循环的第一个参数指定数据元素。

  $(document).ready(function(){
       $.getJSON("http://www.omdbapi.com/?apikey=d8ecb486&s=red", function(data) {
            console.log(data);
        var movies = '';
        $.each(data, function(key,value){
          movies += '<tr>';
          movies += '<td>'+key.poster+'</td>';
          movies += '<td>'+key.title+'</td>';
          movies += '<td>'+key.year+'</td>';
          movies += '</tr>';
        });
        $('#movies_table').append(movies);

       });
  });

推荐阅读