我在Ajax请求之前运行的函数遇到问题(第一个是本地JSON,第二个是在线资源)。
在这个例子中,我希望countTheMovies
在我的应用程序获得所需的所有信息并填充div之后在最后运行。相反,它正在直接运行。
我试图使用if
条件延迟它,但没有快乐。我也试过回调,但我认为我必须得到那些错误(我假设回调就是答案)。我知道时间延迟,但因为在实际项目中我要采购250多部电影(因为时间延迟似乎是作弊)我想我会问这里。
任何人都可以推荐JavaScript或jQuery代码来解决这个问题吗?
$(function(){
getMovieList();
});
function getMovieList() {
$.ajax({
url: "movielist.json",
type: "GET",
dataType: "JSON",
success: function(data) {
for (var i = 0; i < data.length; i++) {
var title = data[i].title.toLowerCase().split(" ").join("+");
var year = data[i].year;
i === data.length - 1
? getMovieInfo(title, year, true)
: getMovieInfo(title, year, false);
}
}
});
}
function getMovieInfo(title, year, isLast) {
$.ajax({
url: "https://www.omdbapi.com/?t=" + title + "&y=" + year + "&plot=short&r=json",
type: "GET",
crossDomain: true,
dataType: "JSON",
success: function(val) {
if (!val.Error) {
movie = title.replace(/[^a-z0-9\s]/gi, '');
$("#app").append(
// appending info to divs
);
}
}
});
if (isLast) countTheMovies();
};
function countTheMovies() {
$("#app").append("There are " + $(".movie").length + " movies.");
}
我的失败的一部分:https://plnkr.co/edit/0mhAUtEsaOUWhkZMJqma?p=preview
答案 0 :(得分:2)
你差不多了!
与getMovieInfo
成功回调中的getMovieList
相同,您应该在countTheMovies
的成功回调中调用getMovieInfo
。
答案 1 :(得分:2)
正如雅各布上面所说,在AJAX请求中移动countTheMovies
调用。
$(function(){
getMovieList();
});
function getMovieList() {
$.ajax({
url: "movielist.json",
type: "GET",
dataType: "JSON",
success: function(data) {
for (var i = 0; i < data.length; i++) {
var title = data[i].title.toLowerCase().split(" ").join("+");
var year = data[i].year;
i === data.length - 1
? getMovieInfo(title, year, true)
: getMovieInfo(title, year, false);
}
}
});
}
function getMovieInfo(title, year, isLast) {
$.ajax({
url: "https://www.omdbapi.com/?t=" + title + "&y=" + year + "&plot=short&r=json",
type: "GET",
crossDomain: true,
dataType: "JSON",
success: function(val) {
if (!val.Error) {
movie = title.replace(/[^a-z0-9\s]/gi, '');
$("#app").append(
// appending info to divs
);
if (isLast) countTheMovies();
}
}
});
};
function countTheMovies() {
$("#app").append("There are " + $(".movie").length + " movies.");
}
&#13;
答案 2 :(得分:1)
如果您希望它成功运行,只需将countTheMovies()
逻辑放在success
中{AJ}请求的getMovieInfo
回调中。
答案 3 :(得分:1)
您可以从Ajax调用的success
字段内调用countTheMovies()函数。通过这种方式,它可以在您打算进行函数调用时使用。
答案 4 :(得分:0)
试试这个
$(function(){
getMovieList();
});
function getMovieList() {
$.when( $.ajax({
url: "movielist.json",
type: "GET",
dataType: "JSON",
success: function(data) {
for (var i = 0; i < data.length; i++) {
var title = data[i].title.toLowerCase().split(" ").join("+");
var year = data[i].year;
i === data.length - 1
? getMovieInfo(title, year, true)
: getMovieInfo(title, year, false);
}
}
}) ).then(function( data, textStatus, jqXHR ) {
countTheMovies();
});
}
function getMovieInfo(title, year, isLast) {
$.ajax({
url: "https://www.omdbapi.com/?t=" + title + "&y=" + year + "&plot=short&r=json",
type: "GET",
crossDomain: true,
dataType: "JSON",
success: function(val) {
if (!val.Error) {
movie = title.replace(/[^a-z0-9\s]/gi, '');
$("#app").append(
// appending info to divs
);
}
}
});
};
function countTheMovies() {
$("#app").append("There are " + $(".movie").length + " movies.");
}