2011-09-11 4 views
3

次のコードブロックが正常配列値(1号130879253000、34756)コードの次のセクションでJavaScript関数が配列にデータを入力しないのはなぜですか?

function getCsv(file_name){ 
     var array_holder = []; 
     $.get(file_name, function(csv, state, xhr) { 

      // inconsistency 
      if (typeof csv != 'string') { 
       csv = xhr.responseText; 
      } 

      // parse the CSV trades 
      var header, comment = /^#/, x; 

      $.each(csv.split('\n'), function(i, line){ 
       if (!comment.test(line)) { 
        if (!header) { 
         header = line; 
        } 
        else { 
         var point = line.split(';'), 
          date = point[0].split('-'), 
          time = point[1].split(':'); 

         if (point.length > 1) { 
          x = Date.UTC(date[2], date[1] - 1, date[0], time[2], time[1], time[0]); 

          array_holder.push([ 
           x, // time 
           parseFloat(point[2]) // close 
          ]); 
         } 
        } 
       } 

      }); // each 
      alert('No. 1' + array_holder[0]); 
     }); 
     return array_holder; 
    } 

を返し、IはgetCsvをコールしようとしているが、私は2番

を未定義取得します
$(function() { 

     var trades = getCsv('trades.csv'); 
     var spreads = getCsv('spreads.csv'); 
     alert('No. 2' + trades[0]); 
} 

なぜ配列が生成されないのですか?実際のコードでは、上記の2つの関数が、ここにリストされている順序で互いに隣り合っています。したがって、ファイルは正しく読み込まれています。つまり、array_holderがスコープから外れてガベージコレクションが行われたようです。

+0

があなたのCSV文字列/ファイルを投稿することができ、または[JSFiddle](http://www.jsfiddle.net)上記のJSを使用して、CSVを作る: ソリューションを取得するには、この議論の答えを参照してください。テキスト? – Bojangles

+0

CSVは必要ありません。非同期対同期の問題です。 – epascarello

答えて

9

これは、非同期性が$.get()であるためです。警告を出した時点で、AJAXリクエストは必ずしも実行されていません。

「No.1」アラートが発生したリクエストの成功コールバックでアラートを行います。

関連する問題