可能的Javascript作用域问题

可能的Javascript作用域问题,javascript,Javascript,我有点不懂这个,所以请原谅我:) 我无法获取函数的这一部分来更新变量。谁能看看我做错了什么 从第142行到第172行,我没有得到任何结果。我在该函数内部进行了测试,以确保它实际上返回了数据,但“body”变量在第172行之后返回。因此,如果我在页面上查看生成的HTML,它只会显示函数从140跳到174 谢谢你的反馈 您的$.get是异步的。这意味着它将在代码剩余部分之后的某个时间完成,因此您不会看到它对该函数中的body变量的影响。相反,它的成功回调函数将在该函数完成后很久调用 要像这里一样链

我有点不懂这个,所以请原谅我:)

我无法获取函数的这一部分来更新变量。谁能看看我做错了什么

从第142行到第172行,我没有得到任何结果。我在该函数内部进行了测试,以确保它实际上返回了数据,但“body”变量在第172行之后返回。因此,如果我在页面上查看生成的HTML,它只会显示函数从140跳到174


谢谢你的反馈

您的
$.get
是异步的。这意味着它将在代码剩余部分之后的某个时间完成,因此您不会看到它对该函数中的body变量的影响。相反,它的成功回调函数将在该函数完成后很久调用

要像这里一样链接多个异步ajax调用,不能只使用常规的顺序编程,因为异步ajax调用不是顺序的。发送网络请求,然后javascript继续执行,稍后当响应到达时,调用并执行成功处理程序

要像以前一样运行连续的ajax调用,必须将工作嵌套在成功处理程序中,以便使用响应的唯一代码实际上位于成功处理程序中。在伪代码中,它如下所示:

$.get(..., function(data) {
    // operate on the results only in here

    // a second ajax function that uses the data from the first 
    // or adds onto the data from the first
    $.get(..., function(data) {
        // now finally, you have all the data 
        // so you can continue on with your logic here

    });
    // DO NOT PUT ANYTHING HERE that uses the responses from the ajax calls 
    // because that data will not yet be available here
});
var myVariable;

$.get(..., function(data) {
    // add something to myVariable
});
$.get(..., function(data) {
    // add something to myVariable
});
$.get(..., function(data) {
    // add something to myVariable
});
// do something with myVariable
你不能像这样做:

$.get(..., function(data) {
    // operate on the results only in here

    // a second ajax function that uses the data from the first 
    // or adds onto the data from the first
    $.get(..., function(data) {
        // now finally, you have all the data 
        // so you can continue on with your logic here

    });
    // DO NOT PUT ANYTHING HERE that uses the responses from the ajax calls 
    // because that data will not yet be available here
});
var myVariable;

$.get(..., function(data) {
    // add something to myVariable
});
$.get(..., function(data) {
    // add something to myVariable
});
$.get(..., function(data) {
    // add something to myVariable
});
// do something with myVariable
在函数结束之前,这些ajax调用都不会完成。您必须遵循我的第一个示例中的设计模式


对于更高级的工具,可以始终使用它,这只是定义ajax调用完成后要运行的代码的另一种方式。它看起来更像是顺序编程,尽管它实际上只是安排代码以与我的第一个代码示例相同的方式运行。

函数8将在第174-180行之后调用。您必须将174-180行的代码放在函数末尾

如果您将问题缩小到特定的代码位,而不是将整个脚本粘贴在粘贴箱上,并希望人们能够调试整个脚本,那么您可能会获得更好的结果。制作一个DOM示例也很有用,这样我们就可以看到它正在运行。一定有更好的方法来实现这一点……看看DOM的东西。您只需执行
document.createElement(“body”)
someElement.insertChild(anotherElement)
。还有,@James Allardice说了些什么。除此之外,欢迎来到SO!谢谢你澄清这一点。这解释了很多:)。在我重新安排一些事情之前,我有一些奇怪的事情发生,但现在这完全有道理了。我会看看我能做些什么来重新设计流程。再次感谢您花时间解释这一切。