根据下面的代码,我想了解为什么当我从ajax函数调用它时,我无法从json(json.projects[i].projName
)调用数据?
var json = JSON.parse(data);
for (var i = 0; i < json.projects.length; i++) {
alert(json.projects[i].projName); //will show correct data
$.ajax({ url: epridlist, method: 'GET'}).then(function (datas) {
alert(json.projects[i].projName) // this will fail. says not know projName, when projName existed in jason data
});
}
请帮我理解。如果我在ajax函数外警告,结果将显示
答案 0 :(得分:1)
这是因为关闭。 Ajax成功回调中的内部函数创建一个闭包,并捕获变量i
的值。内部函数包含对i
变量的引用。
循环执行后,i
的值为json.projects.length
,当您尝试访问json.projects[json.projects.length]
时,您将获得undefined
。
要解决您的问题,您可以尝试使用let
变量而不是var
,其范围较短,与功能范围相比。
您可以参考此问题中的其他方法:JavaScript closure inside loops – simple practical example
var json = JSON.parse(data);
for (let i = 0; i < json.projects.length; i++) {
alert(json.projects[i].projName); //will show correct data
$.ajax({ url: epridlist, method: 'GET'}).then(function (datas) {
alert(json.projects[i].projName) // this will fail. says not know projName, when projName existed in jason data
});
}