可能的Javascript范围问题

时间:2012-07-20 07:17:32

标签: javascript

我有点像这样的菜鸟请原谅我:)。

我无法获得更新变量的函数的这一部分。任何人都可以看看我做错了什么?

http://pastie.org/private/zfnv8v2astglabluo89ta

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

感谢您的任何反馈!!

2 个答案:

答案 0 :(得分:2)

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

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

要像您一样运行顺序ajax调用,您必须将工作嵌套在成功处理程序中,以便使用响应的ONLY代码实际上位于成功处理程序中。在伪代码中,它看起来像这样:

$.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调用都不会在函数结束前完成。你必须遵循我的第一个例子中的设计模式。

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

答案 1 :(得分:0)

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