【发布时间】:2017-04-29 04:05:54
【问题描述】:
我有一些电影,我想在它们上面放海报。我尝试为所有项目创建一个循环,并使用带有 OMDb API 的 getJSON 来获取海报链接,但它似乎只影响最后一个项目。我了解 JavaScript,但说到 jQuery,我完全迷路了。我会很感激任何帮助。 没有愚蠢的问题,对吧? :)
我会让代码完成剩下的工作......
<html>
<head>
<script src="http://code.jquery.com/jquery-3.2.1.js"></script>
</head>
<body>
<ul>
<a href="http://www.imdb.com/title/tt1232829/" target="_blank"><li><h1>21 Jump Street</h1><h2>2012</h2></li></a>
<a href="http://www.imdb.com/title/tt2294449/" target="_blank"><li><h1>22 Jump Street</h1><h2>2014</h2></li></a>
<a href="http://www.imdb.com/title/tt1637725/" target="_blank"><li><h1>Ted</h1><h2>2012</h2></li></a>
</ul>
<script>
function appendPosters() {
var lis = document.getElementsByTagName("li");
for (i = 0; i < lis.length; i++) {
var newImg = document.createElement("img");
lis[i].appendChild(newImg);
lis[i].insertBefore(lis[i].lastChild, lis[i].firstChild);
var getA = lis[i].parentElement;
var imdbLink = getA.getAttribute("href");
var imdbId = imdbLink.substr(26, 9);
var getImg = lis[i].firstChild;
$.getJSON('http://www.omdbapi.com/?i=' + imdbId).then(function(response) {
var poster = response.Poster;
getImg.setAttribute("src", poster);
});
}
}
appendPosters();
</script>
</body>
</html>
请记住,由于 HTML 代码和变量是其他脚本的一部分,因此无法更改它们。
【问题讨论】:
-
$.getJSON是异步的。当它从服务器获得响应并尝试设置src时,您的循环已完成,getImg是最后一个元素。你可以使用闭包来解决这个问题。
标签: javascript jquery loops getjson