Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/448.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问onreadystatechange外部的阵列(范围问题)_Javascript_Arrays_Ajax_Scope_Xmlhttprequest - Fatal编程技术网

Javascript 如何访问onreadystatechange外部的阵列(范围问题)

Javascript 如何访问onreadystatechange外部的阵列(范围问题),javascript,arrays,ajax,scope,xmlhttprequest,Javascript,Arrays,Ajax,Scope,Xmlhttprequest,我有一个函数ajaxCall(),它调用内部带有数组的json文档。 我从xmlhttp.responseText返回的数据存储在数组arrayImages中。我需要在函数ajaxCall()之外访问数组arrayImages,因为我需要该数组的长度arrayImages.length function ajaxCall(){ xmlhttp.onreadystatechange = function(){ if(xmlhttp.readyState==4 &&

我有一个函数ajaxCall(),它调用内部带有数组的json文档。 我从xmlhttp.responseText返回的数据存储在数组arrayImages中。我需要在函数ajaxCall()之外访问数组arrayImages,因为我需要该数组的长度arrayImages.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();
}
我需要这样的功能

var arrayLength = 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();
}

function output(array)
{
   //your other stuff here
   var arrayLength = array.length;
}
这不是范围问题,而是时间问题。XHR是异步的,只有在HTTP请求进行时才会调用状态更改回调。