この時点では Json や jquery は使用しません - プレーンなバニラ Javascript の回答のみをお願いします (SE でこの問題に対する回答をたくさん見つけましたが、それらにはすべて Jquery または Json が含まれています)。
window.onload=function(){...
イベント ハンドラー内に 2 つの関数があります。最初の関数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;
}
}
2 番目の関数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 呼び出しを完了して配列に値を設定する前に、スクリプトが 2 番目の関数 に入ることです。2つの機能の間にタイマーを組み込むことでそれを思い出すことができますが、それは不器用です。Ajax 呼び出しが完了し、配列に値が入力されるまで、アクセスしshowNextName()
たり離れたりしないようにするためのより良い方法はありますか?window.onload