问题是FOR继续执行,而ajax调用从URL检索数据,因此只有数组中的最后一个元素才采用数据。在这种情况下,如何将for与ajax调用同步?
for(ii in scope.selMovies){
for(jj in scope.selMovies[ii]){
var title = scope.selMovies[ii][jj].title.replace(/\s*\(.*/, "");
var yearMovie = scope.selMovies[ii][jj].title.match(/\(.*(20|19)[\d]{2}/)[0].replace(/[^\d]/g, "");
http.jsonp(url + "&query=" + title + callb).
success(function (data) { console.log( ii, jj, title, data.results );
for (k in data.results){
if(data.results[k].release_date.substr(0, 4) == yearMovie ) {
scope.selMovies[ii][jj].infoes = data.results[k];
break;
}
}
}
);
}
}
你是否console.log(ii, jj, title, data.results)
总是显示上次ii
与jj
和title
?
问题不是在Ajax调用调用检索数据时for循环继续进行。问题是您的.success
回调函数http.jsonp
是一个循环内的闭包,因此它的行为不像天真的预期。
阅读此答案,以更好地了解正在发生的事情。
要解决您的特定情况,请执行以下操作:
function MakeSuccessFn(scope, ii, jj, yearMovie, title){
return function (data) {
console.log( ii, jj, title, data.results );
for (k in data.results){
if(data.results[k].release_date.substr(0, 4) == yearMovie ) {
scope.selMovies[ii][jj].infoes = data.results[k];
break;
}
}
};
}
然后在循环中,将您http.jsonp
的内容更改为以下内容
http.jsonp(url + "&query=" + title + callb)
.success(MakeSuccessFn(scope, ii, jj, yearMovie, title));
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句