【发布时间】:2021-03-22 03:46:06
【问题描述】:
我有点困惑为什么这不起作用。我猜这是范围问题,但不完全确定。
如果我在函数内部登录,我会将值推送到 myProjectIds。但是在外面我无法弄清楚为什么在顶部声明的全局数组是空的。
感谢任何帮助!
var myProjects = [];
var myProjectIds = [];
function getProjects() {
$.ajax({
method: 'GET',
url: 'http://localhost:8080/project',
data: {
user: userId,
},
// dataType: "json",
beforeSend: function (xhr) {
/* Authorization header */
xhr.setRequestHeader("Authorization", "Bearer " + userToken);
},
success: function (response) {
myProjects = response;
for (var i = 0; i < myProjects.projects.length; i++) {
myProjectIds.push(myProjects.projects[i]._id);
}
}
})
}
getProjects();
console.log(myProjectIds)
【问题讨论】:
-
这与范围无关,与异步处理有关。您只有在
success或 after 内有值(一般来说,这不是调用函数后的下一行)。您需要传递回调来处理数据或使用 Promise 和/或 async/await。 -
您不需要将
response分配给myProjects,您可以简单地循环遍历它(例如for(..; response.length..,此外,您的循环使用@987654327 会有更整洁的外观@(或.forEach()-loop)
标签: javascript arrays scope