2013-07-11 94 views
1

我試圖把CSV到關聯數組,但$不用彷徨函數不改變可變不能從jQuery get函數

function csvToArray(filename){ 

var textData; 
var headers = new Array(), 
    dataValues = new Array(); 

$.get(filename, function(data){ 
    textData = data; 
}); 

var dataArray = textData.split('\n'); 
headers = dataArray[0].split(','); 

for(var i = 1; i<dataArray.length; i++){ 
    var thisLine = dataArray[i].split(','), 
     tempArray = new Array(); 

    for(var j = 0; j<thisLine.length; j++){ 
     tempArray[headers[j]] = thisLine[j]; 
    } 

    dataValues.push(tempArray); 
} 

return dataValues; 

} 

爲什麼不的TextData被設置外面的TextData訪問之外的變量?

回答

5

得到的是異步

因此,通過的TextData設定的時間,剩下的語句已經執行。

因此,考慮將get之後的語句移到回調函數中,其中textData已填充,然後可以對其執行處理。

+0

你可以設置異步爲false或只是使其與async的ajax調用:flase會更好嗎? –

+0

你可以設置'async:false',但這是一個不好的做法... –

+0

@JordanSimon - 使用同步請求是[MDN根據壞主意](http://mdn.beonex.com/en/DOM/ XMLHttpRequest/Synchronous_and_Asynchronous_Requests.html):*注意:不應該使用同步的XMLHttpRequests,因爲由於網絡固有的異步性質,在使用同步請求時存在內存和事件泄漏的各種方式。*(這是XMLHttpRequests ,但這個原則仍然適用,因爲這可能是jQuery隱藏的原因。) – DaoWen