我有一个读取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()
,但它也不起作用。
答案 0 :(得分:4)
你想做这样的事情:
Q_DECLARE_METATYPE()
Javascript不会等待所有代码逐行运行,因此对于异步调用,您需要一个单独的函数来处理数据或处理成功回调中的数据。另一个功能是更干净,但取决于你想对数据做什么。
答案 1 :(得分:2)
您正在使用$.ajax
函数运行异步请求,因此您应该等待响应,然后在从服务器端收到响应时调用console.log
内部成功回调,否则{ {1}}因查询未决而无效:
console.log
希望这有帮助。
答案 2 :(得分:2)
由于console.log(a[2]);
的异步性质,AJAX
在AJAX
完成处理之前运行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();
成功。请参阅工作代码段:
<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;
您可以详细了解AJAX的工作原理 here 。