基于下面的代码,我想了解为什么当我从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函数之外发出警报,结果将显示
最佳答案
这是因为关闭。 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(数据);
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
});
}
关于javascript - 无法将 json 数据传递给 Ajax 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41835949/