:
function someFunction() {
//1. code that needs to run before ajax
$.ajax({...}).done(function() {
//2. code that needs to be run after the ajax call has returned
});
//3. code that needs to be run between the time the user presses
// a button and the time everything is done.
}
JavaScriptが実行に同期しているので(労働者が使用されていない限り、それは、この特定の問題とは無関係なのです)これは動作します。最初のコードが実行されると、ajax呼び出しはブラウザにXHR要求を開始するように指示しますが、someFunction
は完了していないため、同期して実行され続けます。
someFunction
が実行されると、発生する非同期イベントまでコントロールフローが開き、最終的にdone
コールバックにつながります。
ほとんどの人にとって、公正で非同期のイベント指向プログラミングは頭を悩むものではありません。どのようなコードが何時に発生するはずかを追跡するのは簡単です。ここで
は、非同期動作がどのように動作するかの簡単実行例を示します
(function() {
alert(1);
setTimeout(function() {
alert(2);
}, 0); //note the 0ms delay
alert(3);
}());
アラートの順序は1
、3
、2
になります。 setTimeout
は、指定された時間が経過するのを待つことに依存するため、コールバックを同期的に呼び出さないため、時間が経過しなくても、現在の関数が終了するまで待つ必要があります。
あなたはドキュメントを読もうとしましたか? http://api.jquery.com/jQueryのすべてのケースについての説明があります。ajax/ – charlietfl