2016-11-16 113 views
1

我有一個函數ajaxCall(),它調用一個帶有數組的內部json文檔。 我從xmlhttp.responseText取回的數據存儲在數組arrayImages中。我需要訪問函數ajaxCall()之外的數組arrayImages,因爲我需要該數組的長度arrayImages.length。如何訪問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(); 
} 

我需要的是這樣出來的功能

var arrayLength = arrayImages.length; 
+0

這不是*範圍*問題,這是一個*時間*問題。您的XHR是異步的,只有在HTTP請求進展時纔會調用狀態更改回調。 – Pointy

回答

1

的由於onreadystatechange是一個異步函數,你不能確切地知道什麼時候會得到了數組返回。因此,處理它的唯一方法是使用回調函數在數組完成時輸出數組的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; 
}