2016-11-16 3 views
1

У меня есть функция ajaxCall(), которая вызывает json-документ с массивом внутри. Данные, которые я возвращаю из xmlhttp.responseText, хранятся в массиве arrayImages. Мне нужно иметь доступ к массиву arrayImages вне функции ajaxCall(), потому что мне нужна длина этого массива 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; 
} 
Смежные вопросы