我正在處理大型數據文件時出現時間問題。有時,「getFileData(selectedFile)」之後的語句在下載文件之前執行,並且語句失敗。我正在考慮一個「暫停」功能,但必須有更好的東西。javascript http請求滯後
$("#dropDown").change(function(){
var selectedFile = $("#dropDown").val();
var text = getFileData(selectedFile);
var valueLength = text.constructs[0].data_sections[0].values.length;
var errorLength = text.constructs[0].data_sections[0].errors.length;
. . . .
. . . .
. . . .
});
var getFileData = function(fileName){
var xmlhttp = new XMLHttpRequest();
var url = "http://xxx/xxx.php";
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
var response = JSON.parse(xmlhttp.responseText.substr(0,xmlhttp.responseText(indexOf("<")));
return response;
}
}
xmlhttp.open("GET", url + "?q=" + fileName + ".txt", true);
xmlhttp.send();
}
你應該將所有依賴於你的VAR文本的回調函數的代碼:xmlhttp.onreadystatechange - 你的XMLHTTP請求是非阻塞[這是很好] - 你通過在這裏傳遞true告訴它是異步的:xmlhttp.open(「GET」,url +「?q =」+ fileName +「.txt」,true); – 2014-10-10 23:52:30
XMLHttpRequest()本質上是異步的。您應該考慮使用回調模式(如pep的回答+1所示)或使用promise。 – JME 2014-10-10 23:59:52