2014-01-23 20 views
1

使用純JavaScript/Ajax,我想採取一組文件名(如:["Data.txt", "UserInfo.txt", "Project.txt"]),然後將它們的數據加載到一個數組中。如何使用Ajax加載文件數組?

的代碼應該是這樣的:

var fileNames = ["Data.txt", "UserInfo.txt", "Project.txt"], 
    fileData = [], 
    client = new XMLHttpRequest(); 
client.onreadystatechange = function() { 
    if (client.readyState === 4) { 
     fileData.push(client.responseText); 
    }; 
}; 
for(i = 0; i < fileNames.length; i++){ 
    client.open('GET', fileNames[i]); 
    client.send(); 
}; 
console.log(fileData); 

。 這就是我試圖做的,但它不能正常工作。

我該如何做到這一點?

謝謝。

+0

這是什麼'fileData.push = client.responseText'?看起來不正確。此外,如果我沒有錯,這看起來像日常阿賈克斯問題。當你記錄'fileData'時,文件不會被響應返回。 – elclanrs

+0

@elclanrs感謝您指出這一點,我已經修復了第一部分,但我不知道該怎麼做第二部分。再次感謝...... :) – Progo

回答

1

你讓異步請求,這是應該是同步請求:

var fileNames = ["Data.txt", "UserInfo.txt", "Project.txt"], 
    fileData = [], 
    client = new XMLHttpRequest(); 

for(i = 0; i < fileNames.length; i++){ 
    client.open('GET', fileNames[i], false); 
    client.send(); 
    fileData.push(client.responseText); 
}; 
console.log(fileData); 
+0

_asynchronous_和_synchronous_請求是什麼意思?有什麼不同?謝謝。 – Progo

+1

那麼,你的解決方案確實可行!我仍然想知道我以前的評論的答案... :) – Progo

+1

異步請求在應用程序的不同線程中執行,通過此過程主程序不必等待指令完成才能執行下一個代碼,這裏發生的事情是,每次迭代都會覆蓋所有的請求,而之前的中斷只有最後一個可以完成,當您執行同步請求時,程序將不得不等待,直到下載請求的頁面執行下一條指令。正如你所看到的,我們不會在新模型中使用像readystatechange這樣的回調,只是循環。 –