从AJAX请求获取数组值

时间:2017-01-10 14:51:31

标签: 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",
        success : function(data){
            for(i in data){
                a.push(data[i].name);
            }
        }
    });
}

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

JSON

[
    {"name" : "One"},
    {"name" : "Two"},
    {"name" : "Three"},
    {"name" : "Four"},
    {"name" : "Five"}
]

我无法访问此阵列的特定索引。控制台日志始终返回 undefined 。我在ajax电话会议后尝试添加.then(),但它也不起作用。

3 个答案:

答案 0 :(得分:4)

你想做这样的事情:

Q_DECLARE_METATYPE()

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

答案 1 :(得分:2)

您正在使用$.ajax函数运行异步请求,因此您应该等待响应,然后在从服务器端收到响应时调用console.log内部成功回调,否则{ {1}}因查询未决而无效:

console.log

希望这有帮助。

答案 2 :(得分:2)

由于console.log(a[2]);的异步性质,AJAXAJAX完成处理之前运行undefined,这就是它返回AJAX的原因。将console.log置于var a = []; var myMethod = function(){ $.ajax({ url : "https://api.myjson.com/bins/b4bnr", dataType : "json", success : function(data){ for(i in data){ a.push(data[i].name); } console.log(a[2]); } }); } myMethod();成功。请参阅工作代码段:

&#13;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
db.orders.aggregate([{
  $lookup: {
    from: "inventory",
    localField: "item",
    foreignField: "sku",
    as: "inventory_docs"
  }
}])
&#13;
&#13;
&#13;

您可以详细了解AJAX的工作原理 here