0

次のjsコードがあるとしましょう

$(function() {
   $('#some_id').load('myfile.html', function() {
      alert('Call back called');
   });

  alert('You should alert second');
  // more javascript code .........

});

何らかの理由で、alert('Call back called');私に警告される最後のことです。jsコードはファイル順に実行されると思っていました。alert('Call back called');私の他のすべての機能の前に最初に行く方法はありますか?

私の単純なコード スニペットを見るとalert('You should alert second');、関数のコールバックを入れない理由がわかります。残念ながら、非常に大きなコード ベースを継承しており、コールバック内のすべての関数呼び出しを妨害することはできません。

4

6 に答える 6

2

.load()は非同期メソッドであり、パラメーターとして渡した無名関数は、非同期メソッドの実行が終了したときにのみ実行されます。

于 2013-08-27T14:58:37.353 に答える
1

「jsコードはファイル順に実行されると思っていました。」 それはそうです、そしてそれがここで起こっていることです。しかし、.load()コールバック関数は、まあ、コールバック (つまり、非同期操作が完了しalert('Call back called');たときにのみ起動する) であるため、将来のある時点で呼び出されたときにのみ起動します。

于 2013-08-27T15:04:01.280 に答える
1

他の人が指摘したように、ロードは非同期メソッドであるため、同期 AJAX 呼び出しのようなものを使用する必要があります。次のように使用します。

$.ajax({
     url:    'myfile.html',
     async:   false
     success: function(result) {
                  alert('Call back called');
              }
});

alert('You should alert second');
于 2013-08-27T15:07:35.490 に答える
1

非同期呼び出しを処理するDeferred Objectを使用できます。そうすることで、応答がいつ返されても、コードは読み取り順に実行されます。

$(function() {
    var jqxhr = $.get('myfile.html', function(data) {
        $('#some_id').html(data);
        alert('Call back called');
    });
    jqxhr.done(function() { 
        alert('You will alert second');
    });
});
于 2013-08-27T15:24:52.783 に答える
0

2 番目に発生させたい場合はalert('You should alert second');、コールバック関数内から呼び出す必要があります。

$(function() {
   $('#some_id').load('myfile.html', function() {
      alert('Call back called');
      alert('You should alert second');
   });

});
于 2013-08-27T15:00:13.533 に答える