无法将json数据传递给Ajax函数

时间:2017-01-24 18:07:18

标签: javascript jquery json ajax

根据下面的代码,我想了解为什么当我从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函数外警告,结果将显示

1 个答案:

答案 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
    });
}