我沒有在這一點上使用JSON或jQuery的 - 普通的香草的Javascript答案只有請(我發現了一堆答案在SE這個問題,但它們都包括jQuery的或JSON)。如何確保在調用window.onload內部的新函數之前完成Ajax調用?
我有一個window.onload=function(){...
事件處理器內部的兩個功能。第一功能fillArray(from,to)
是以下形式的Ajax調用:
function fillArray(from,to){
request = createRequest();
if (request == null) {
return;
}
var url= "Ajax_retrieveNames.php?indexFrom=" + from + "&indexTo=" + to;
request.open("GET", url, true);
request.onreadystatechange = populateArray;
request.send(null);
}
function populateArray(){
var xmlFrag=null;
if (request.readyState == 4) {
if (request.status == 200) {
xmlFrag = request.responseXML;
for(var i=indexFrom; i<=indexTo; i++){
fcArray[i]=new Array();
var f=xmlFrag.getElementsByTagName("first")[i].childNodes[0].nodeValue;
var l=xmlFrag.getElementsByTagName("last")[i].childNodes[0].nodeValue;
fcArray[i][0]=f;
fcArray[i][1]=l;
}
}else{
return;
}
}else{
return;
}
}
第二功能用的格式和(第一在這種情況下)顯示下一的元素showNextName()
交易子陣列。在這一點上,var arrayIndex
設置爲0:
function showNextName(){
displayQuestion() // Deals with page formatting
document.getElementById('firstName').innerHTML=fcArray[arrayIndex][0];
document.getElementById('lastName').innerHTML=fcArray[arrayIndex][1];
updateArrayIndex(); // Is a counter that increments the variable arrayIndex
}
我的問題是,腳本進入第二個功能,showNextName()
,完成Ajax調用和填充前陣。我可以通過在兩個功能之間加入計時器來解釋這一點,但這很笨拙。有沒有更好的辦法,以確保我們不會陷入showNextName()
或離開window.onload
直到Ajax調用完成並填充數組?
這一工程,但我用'populateArray'在其他情況下,我不想叫'showNextName()'。我想我可以使用一個變量作爲一個標誌,只調用'showNextName()'如果標誌是「漲」 ... – JDelage 2013-02-19 14:02:55
@JDelage或者你可以從你的脫鉤''populateArray'檢查readyState',你只當它調用需要。 – marteljn 2013-02-19 14:04:27