2016-11-16 27 views
1

配列を内部に持つjsonドキュメントを呼び出す関数ajaxCall()があります。 xmlhttp.responseTextから返されたデータは、配列arrayImagesに格納されます。私はその配列の長さ、arrayImages.lengthが必要なので、関数ajaxCall()の外で配列arrayImagesにアクセスする必要があります。onreadystatechange以外の配列にアクセスする方法(スコープの問題)

function ajaxCall(){ 
    xmlhttp.onreadystatechange = function(){ 

     if(xmlhttp.readyState==4 && xmlhttp.status==200){ 
      arrayImages = JSON.parse(xmlhttp.responseText); 
      output(arrayImages); 

     } 
    } 

    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 
} 

私はonreadystatechangeは非同期関数であるので、それはあなたの配列が返さなければならないとき、あなたは確実に知ることができない

var arrayLength = arrayImages.length; 
+0

*範囲*問題ではなく、タイミング問題です。あなたのXHRは非同期で、HTTP要求が進んだときにのみ状態変更コールバックが呼び出されます。 – Pointy

答えて

1

機能のうち、このようなものが必要。したがって、配列のlengthが出力されるときにコールバック関数を使用して出力することが唯一の方法です。 このように:

function ajaxCall(){ 
    xmlhttp.onreadystatechange = function(){ 

     if(xmlhttp.readyState==4 && xmlhttp.status==200){ 
      arrayImages = JSON.parse(xmlhttp.responseText); 
      output(arrayImages); 

     } 
    } 

    xmlhttp.open("GET", url, true); 
    xmlhttp.send(); 
} 

function output(array) 
{ 
    //your other stuff here 
    var arrayLength = array.length; 
} 
関連する問題