0

我对此有点菜鸟,所以请原谅我:)

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

http://pastie.org/private/zfnv8v2astglabluo89ta

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

感谢您的任何反馈!

4

2 回答 2

2

$.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

在函数结束之前,这些 ajax 调用都不会完成。您必须遵循我的第一个示例中的设计模式。

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

于 2012-07-20T07:21:23.680 回答
0

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

于 2012-07-20T07:22:54.917 回答