Javascript XHR For循环-意外的输入结束错误

Javascript XHR For循环-意外的输入结束错误,javascript,xmlhttprequest,Javascript,Xmlhttprequest,我正试图发出多个XHR请求以下载总共3个JSON提要。不幸的是,在出现意外的输入结束错误之前,我只能执行一个transferComplete()。我已经检查了我的语法,据我所知,它看起来不错。为什么会这样 function getJSON(){ feedObject["url"]["0"] = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson", feedObject["url"][

我正试图发出多个XHR请求以下载总共3个JSON提要。不幸的是,在出现意外的输入结束错误之前,我只能执行一个transferComplete()。我已经检查了我的语法,据我所知,它看起来不错。为什么会这样

function getJSON(){
    feedObject["url"]["0"] = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson",
    feedObject["url"]["1"] = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson",
    feedObject["url"]["2"] = "http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson";

    var xhr = [];

    for (a = 0; a < 3; a++) {

        (function(a){
            xhr[a] = new XMLHttpRequest();
            xhr[a].addEventListener("load", transferComplete(a));
            xhr[a].open("GET", feedObject["url"][a], true);
            xhr[a].send(null);

            feedObject["quakesMag"][a] = [],
            feedObject["quakesPlace"][a] = [],
            feedObject["quakesTime"][a] = [];
        })(a);

    }

    function transferComplete(a) {
        // receiving data
        loadText.innerText = "Getting USGS Data "+(a+1)+ "/3";
        var response = JSON.parse(xhr[a].responseText);
        feedObject["quakesTitle"][a] = response["metadata"]["title"];

        for (var i = 0, len = response["features"].length; i < len; i++) {
            if (response["features"][i]["properties"]["mag"] != null) {
                quakes = [],
                quakeCount = 0;
                quakes.push(response["features"][i]);
            }
        }

        for (var x = quakes.length - 1; x >= 0; x--) {
            var quake = quakes[x],
                quakeCoord = quake["geometry"]["coordinates"],
                quakeMag = quake["properties"]["mag"],
                quakePlace = quake["properties"]["place"],
                quakeTime = quake["properties"]["time"];

            quakeCount++;

            feedObject["quakesMag"][a].push(quakeMag);
            feedObject["quakesPlace"][a].push(quakePlace);
            feedObject["quakesTime"][a].push(quakeTime);

        }

        feedObject["quakesCount"][a] = quakeCount;

        if (a == 2){ renderData(); }

    }

}
函数getJSON(){ feedObject[“url”][“0”]=”http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_day.geojson", feedObject[“url”][“1”]=”http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_week.geojson", feedObject[“url”][“2”]=”http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_month.geojson"; var xhr=[]; 对于(a=0;a<3;a++){ (职能(a){ xhr[a]=新的XMLHttpRequest(); xhr[a].addEventListener(“加载”,transferComplete(a)); xhr[a].open(“GET”,feedObject[“url”][a],true); xhr[a]。发送(空); feedObject[“quakesMag”][a]=[], feedObject[“quakesPlace”][a]=[], feedObject[“QuakeTime”][a]=[]; })(a) ); } 功能转移完成(a){ //接收数据 loadText.innerText=“获取美国地质勘探局数据”+(a+1)+“/3”; var response=JSON.parse(xhr[a].responseText); feedObject[“quakesTitle”][a]=响应[“元数据”][“标题”]; 对于(变量i=0,len=response[“features”]。长度;i=0;x--){ var地震=地震[x], 地震坐标=地震[“几何体”][“坐标”], quakeMag=地震[“属性”][“磁”], 地震地点=地震[“财产”][“地点”], quakeTime=地震[“属性”][“时间”]; 地震计数++; feedObject[“quakesMag”][a]。推送(quakeMag); feedObject[“地震地点”][a]。推送(地震地点); feedObject[“quakeTime”][a]。推送(quakeTime); } feedObject[“地震计数”][a]=地震计数; 如果(a==2){renderData();} } }
使用多个AJAX请求的加载事件侦听器导致错误

使用on ready state changed解决了此问题

(function(a){
            xhr[a] = new XMLHttpRequest();

            xhr[a].open("GET", feedObject["url"][a], true);

            xhr[a].onreadystatechange = function (aEvt) {
                if (xhr[a].readyState == 4) {
                    if(xhr[a].status == 200)
                        transferComplete(a);
                    else
                        alert("Error loading page\n");
                }
            };
            xhr[a].send(null);

            feedObject["quakesCoord"][a] = [],
            feedObject["quakesMag"][a] = [],
            feedObject["quakesPlace"][a] = [],
            feedObject["quakesTime"][a] = [];
        })(a);