Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.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 从AJAX请求获取数组值_Javascript_Jquery_Json_Ajax - Fatal编程技术网

Javascript 从AJAX请求获取数组值

Javascript 从AJAX请求获取数组值,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我有一个脚本,它读取一个JSON文件,然后用每个元素的name属性填充一个数组 HTML <script src="https://code.jquery.com/jquery-2.2.4.min.js"></script> <script> var a = []; var myMethod = function(){ $.ajax({ url : "numbers.json", dataType : "json",

我有一个脚本,它读取一个JSON文件,然后用每个元素的name属性填充一个数组

HTML

<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
var a = [];

var myMethod = function(){
    $.ajax({
        url : "numbers.json",
        dataType : "json",
        success : function(data){
            for(i in data){
                a.push(data[i].name);
            }
        }
    });
}

myMethod();
console.log(a[2]); // console.log() returns "undefined"
</script>

我无法访问此数组的特定索引。控制台日志始终返回未定义的。我尝试在ajax调用之后添加
。然后(),但是它也不起作用。

您正在使用
$.ajax
函数运行异步请求,因此您应该等待响应,然后在从服务器端收到响应时调用
控制台.log
内部成功回调,否则
控制台.log
将不起作用,因为查询处于挂起状态:

success : function(data){
     for(i in data){
         a.push(data[i].name);
     }
     console.log(a[2]);
}
希望这有帮助。

您的
console.log(a[2])
AJAX
完成处理之前运行,因为
AJAX
的异步性质,所以它返回
未定义的
。将console.log放入
AJAX
success中。请参阅工作代码段:

var a=[];
var myMethod=函数(){
$.ajax({
url:“https://api.myjson.com/bins/b4bnr",
数据类型:“json”,
成功:功能(数据){
对于(数据中的i){
a、 push(数据[i].name);
}
console.log(a[2]);
}
});
}
myMethod()

您将需要执行以下操作:

<script src="https://code.jquery.com/jquery-2.2.4.min.js"></script>
<script>
var a = [];

var myMethod = function() {
    $.ajax({
        url: "numbers.json",
        dataType: "json",
        success: function(data) {
            for (i in data) {
                a.push(data[i].name);
            }
            handleData();
        }
    });
}

function handleData() {
    console.log(a[2]);
}

myMethod();
</script>

var a=[];
var myMethod=函数(){
$.ajax({
url:“numbers.json”,
数据类型:“json”,
成功:功能(数据){
对于(数据中的i){
a、 push(数据[i].name);
}
handleData();
}
});
}
函数handleData(){
console.log(a[2]);
}
myMethod();

Javascript不会等待所有代码逐行运行,因此对于异步调用,您需要一个单独的函数来处理数据或处理成功回调中的数据。另一个函数可能会更干净,但这取决于您想对数据执行什么操作。

当ajax调用完成时,myMethod函数完成,并移动到下一行,即console.log。只有在返回对numbers.json的请求后,才会执行success。试试这个:

var a = [];

var myMethod = function(){
    $.ajax({
        url : "numbers.json",
        dataType : "json",
        success : function(data){
            for(i in data){
                a.push(data[i].name);
            }
            console.log(a[2]);
        }
    });
}

myMethod();

您的console.log在ajax请求完成之前运行。在创建数组的ajax成功函数中签入,您将得到它number.json中有什么?你能在这里发布虚拟数据吗?这样我就可以为你创建一个简单的代码片段。JSON已经给出了。如果你将ajax属性设置为“async:false”,那么你的代码也可以工作。多年来,这个问题已经被问了很多次,我们有一个标准的副本。你为什么不用你的金徽章来标记这是一个复制品?
var a = [];

var myMethod = function(){
    $.ajax({
        url : "numbers.json",
        dataType : "json",
        success : function(data){
            for(i in data){
                a.push(data[i].name);
            }
            console.log(a[2]);
        }
    });
}

myMethod();