2016-04-10 35 views
0

合計3つのJSONフィードをダウンロードするために複数のXHRリクエストを作成しようとしています。残念ながら、予期せぬ入力エラーの終了でヒットする前に、ただ1つのtransferComplete()を実行するだけです。私は私の構文をチェックし、私はそれが良いと言うことができる限りです。なぜこうなった?XHR For Loop - 予期しない入力エラーの終了

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(); } 

    } 

} 

答えて

0

複数のAJAX要求を使用するロードイベントリスナーがエラーを引き起こしていました。

レディ状態で変更を使用して問題を解決しました。

(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); 
関連する問題