多个xmlhttp请求使用javascript异步

时间:2015-07-18 18:09:10

标签: javascript asynchronous xmlhttprequest

我有一系列电影片名,我通过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,则会正确显示: 第一个搜索结果 第二个搜索结果......依此类推

1 个答案:

答案 0 :(得分:0)

如果您使用的是jQuery Ajax,可以使用promise s对象和$.when轻松解决这个问题,但正如您所说的没有库并且还考虑了手机,所以您需要使用在ECMAScript 6中支持的普通javascript promise对象。