簡単な答えはオフにすることasync
です。しかし、それは間違ったことです。正解は、残りのコードの書き方を再考することです。
これを書く代わりに:
function functABC(){
$.ajax({
url: 'myPage.php',
data: {id: id},
success: function(data) {
return data;
}
});
}
function foo () {
var response = functABC();
some_result = bar(response);
// and other stuff and
return some_result;
}
次のように記述します。
function functABC(callback){
$.ajax({
url: 'myPage.php',
data: {id: id},
success: callback
});
}
function foo (callback) {
functABC(function(data){
var response = data;
some_result = bar(response);
// and other stuff and
callback(some_result);
})
}
つまり、結果を返す代わりに、コールバックとして実行する必要があるコードを渡します。既に示したように、コールバックは、関数呼び出しと同じ数のレベルにネストできます。
非同期をオフにするのは間違っていると私が言う理由の簡単な説明:
非同期をオフにすると、ajax 呼び出しを待機している間、ブラウザーがフリーズします。ユーザーは何もクリックできず、スクロールできません。最悪の場合、ユーザーのメモリが不足している場合、ユーザーがウィンドウを画面からドラッグして再度ドラッグすると、ブラウザーがフリーズしてスクロールできないため、空のスペースが表示されることがあります。再描画します。IE7 のようなシングル スレッド ブラウザの場合はさらに悪化します。すべての Web サイトがフリーズします。これを経験したユーザーは、あなたのサイトにバグがあると思うかもしれません。本当に非同期で処理したくない場合は、バックエンドで処理を行い、ページ全体を更新してください。少なくともバグではないと感じます。