我有点像这样的菜鸟请原谅我:)。
我无法获得更新变量的函数的这一部分。任何人都可以看看我做错了什么?
http://pastie.org/private/zfnv8v2astglabluo89ta
从第142行到第172行,我最终没有得到任何结果。我已经在该函数内部进行了测试,以确保它实际上是返回数据,但是“body”变量在第172行之后传回。因此,如果我在页面上查看生成的HTML,它只是看起来函数从140跳过到174。
感谢您的任何反馈!!
答案 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行放到函数末尾