繁体   English   中英

JavaScript范围问题和混乱

[英]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具有新值。 然而,早在阿贾克斯外,当我下一次加idsubject ,以我的表,价值subject仍然测试。

我将不胜感激任何指示,谢谢!

“ Ajax”代表“异步JavaScript和XML”,这意味着它是异步的 因此,每当调用$ .ajax时,该代码就会该ajax调用后的代码同时运行。 这可能非常有用,但在像ajax调用之外的其他内容取决于Ajax调用中的数据的情况下,这也很烦人。 通常,这就是成功功能的用途。

如果您想进行快速而肮脏的修复,则可以在ajax调用中添加async:false作为key:value对,尽管由于它破坏了ajax的异步功能,所以对此一无所知。

有关如何在for循环中进行异步ajax调用的信息,请参见此答案

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM