Javascript XHR For循环-意外的输入结束错误
我正试图发出多个XHR请求以下载总共3个JSON提要。不幸的是,在出现意外的输入结束错误之前,我只能执行一个transferComplete()。我已经检查了我的语法,据我所知,它看起来不错。为什么会这样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"][
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使用多个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);