[英]Javascript scope problems and confusion
我知道范围应该很简单。 在浏览有关范围界定的文档时,以及在这里阅读对其他提出此要求的人员的答复时,我都可以看到。 这就是为什么我很困惑。 这是我正在使用的相关代码块:
$.ajax({
type: "GET",
url: locationURL,
success: function (result) {
console.log(result);
var output = "<table><thead><tr><th>ID</th><th>Subject</th></thead><tbody>";
for (var i in result.messages) {
var id = result.messages[i].id;
var locationURL = "https://www.googleapis.com/gmail/v1/users/me/messages/" + id + "?access_token=" + token;
var subject = "test";
$.ajax({
type: "GET",
url: locationURL,
success: function (result) {
subject = result.payload.headers[0].name;
console.log(subject);
}
});
console.log(subject);
output += "<tr><td>" + id + "</td><td>" + subject + "</td></tr>";
}
output += "</tbody></table>";
display.html(output);
$("table").addClass("table");
}
});
如您所知,我正在使用Gmail API。 那我在这里做什么? 第一个ajax调用获取所有消息ID的列表。 然后,对于每个消息ID,我需要请求消息详细信息,因此需要嵌套的Ajax调用。
现在,令人困惑的部分是:在外部ajax调用的成功函数中,我定义了var subject = "test"
。 我打算用每封邮件的主题行覆盖此内容。 在我专门在消息详细信息的有效负载中查找主题行之前,我只想获取一些新字符串而不是进行测试。 在嵌套ajax调用的成功函数中,我设置subject = result.payload.headers[0].name;
随后的“ console.log(subject)”向我显示var subject
具有新值。 然而,早在阿贾克斯外,当我下一次加id
和subject
,以我的表,价值subject
仍然测试。
我将不胜感激任何指示,谢谢!
“ Ajax”代表“异步JavaScript和XML”,这意味着它是异步的 。 因此,每当调用$ .ajax时,该代码就会与该ajax调用后的代码同时运行。 这可能非常有用,但在像ajax调用之外的其他内容取决于Ajax调用中的数据的情况下,这也很烦人。 通常,这就是成功功能的用途。
如果您想进行快速而肮脏的修复,则可以在ajax调用中添加async:false
作为key:value对,尽管由于它破坏了ajax的异步功能,所以对此一无所知。
有关如何在for循环中进行异步ajax调用的信息,请参见此答案 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.