我有一系列电影片名,我通过xmlhttp请求检索元数据。我想尽可能使用javascript来保持这一点,因为它将在移动设备上运行。当我以异步方式执行此操作时,我得到了10个相同的对象,这是我在阵列中的最后一个搜索URL。如果我将异步设置为false,它可以正常工作,但显然这是不可取的。这是我的代码中与此问题相关的部分......
var movieObjArr = [];
var searchUrls = [
// 10 search urls
];
function fetchMovieData(searchUrl) {
var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var result = JSON.parse(xmlhttp.responseText);
response(result);
}
}
xmlhttp.open("GET", searchUrl, true);
xmlhttp.send();
}
function response(result){
movieObj.push(result);
// once the movieObjArr has ALL the search results, display them
// I must wait until all results are in because I then sort the array
so it's in alphabetical order
if (movieObjArr.length == searchUrls.length){
// call sort function
// go through movieObjArr and display each result
}
}
显示代码:
上次搜索结果 最后的搜索结果 最后的搜索结果... 10次
如果我将async更改为false,则会正确显示: 第一个搜索结果 第二个搜索结果......依此类推