【发布时间】:2012-07-13 17:01:06
【问题描述】:
我正试图集中精力协调异步操作。我需要一点帮助理解:
- 为什么使用 while 循环来等待操作完成是一个坏主意并且不起作用,并且
- 如果有在 jQuery 函数上使用回调的可行替代方法
大多数情况下,将回调添加到像 $.get() 这样的异步函数效果很好。然而,在某种程度上,这确实决定了我不喜欢的代码的编写方式和位置。
$(function() {
var r = AjaxResults( page );
// loop prevents further processing until GetResults() is done
while( isComplete == false )
isComplete = $('body').data('isComplete');
// reset isComplete boolean
$('body').data('isComplete', false);
// this will only continue after GetResults() has exited
paintTheTownRed();
var whateverElse = true;
});
function AjaxResults( page ) {
// do something before async operation
switch( page ){
case '1': {...} break;
...
default: break;
}
$.getJSON("/controller/page", null, function(data) {
// do something after async operation
{...}
$('body').data('isComplete', true);
return data;
});
}
【问题讨论】:
-
我不明白你的问题。回调是编程的标准部分。 “规定了我不喜欢的代码的编写方式和位置”是什么意思?
-
@scott.korin 我相信他的意思是它通常要求程序员要么到处传递回调处理程序,和/或过度嵌套匿名函数。
$.Deferred是这两个问题的答案。
标签: javascript jquery ajax asynchronous coordinate