非同期操作の調整に頭を悩ませようとしています。理解するのに少し助けが必要です:
- 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;
});
}