17

2 つの異なる関数で 2 つの ajax 呼び出しがあります。.click を使用して、これら 2 つの関数を呼び出したいと考えています。func1 はデータベースにデータを挿入し、次に func2 はデータを取得するため、func1 が完全に完了するまで待ってから func2 のみを実行する方法を質問します。

私は .delay() を試しましたが、うまくいきましたが、これはばかげた解決策だと思います。

  $("#updateLocation").click(function(e){
      e.preventdefault;
        func1();
        func2();
      });
      return false;
    });

    function func1(){
      $.ajax({
        url:'',
      });
});

    function func2(){
      $.ajax({
        url:'',
      });
});
4

6 に答える 6

30

3 つの方法:

func1 の成功時に func2 を呼び出します。

    function func1() {
       $.ajax({ ... }).done(func2);
    }

Deferredfunky の完了時に API を使用して func2 を呼び出します。

    e.preventDefault();
    $.when(func1).then(func2);

func1 を同期化します (非推奨):

    function func1() {
       $.ajax({url: '', async: false});
    }
于 2012-09-20T16:32:05.183 に答える
7

Ajax 呼び出しは非同期であるため、アプリケーションは ajax 呼び出しが完了するまで「一時停止」せず、次の呼び出しをすぐに開始します。

JQuery は、呼び出しが成功したときに呼び出されるハンドラーと、呼び出し中にエラーが発生した場合に別のハンドラーを提供します。

$.ajax({
  url: 'ajax/test.html',
  success: function(data) {
    $('.result').html(data);
    alert('Load was performed.');
  },
  error :function(jqXHR, textStatus, errorThrown)
  {
     alert("something went wrong");
  }
});

成功ハンドラーから 2 番目の AJAX 関数を呼び出す必要があります。

于 2012-09-20T16:33:44.527 に答える
3

func2 を func1 内に移動->ajax->succes コールバック

$("#updateLocation").click(function(e) {
    e.preventdefault;
    func1();
    //func2();
});
return false;
});

function func1() {
    $.ajax({
        url: '',
        success: function() { /* other stuff */
            func2();
        }
    });
});

function func2() {
    $.ajax({
        url: '',
    });
});
于 2012-09-20T16:31:23.383 に答える
2

オプション「async」を false に設定できます (最初の ajax 呼び出しの場合)。

これは、関数 1 が応答を受信した後、つまり関数 2 が実行を終了した後に呼び出されることを意味します。

    function func1(){
      $.ajax({
        url:'',
        async: false
      });
});
于 2012-09-20T16:31:12.297 に答える
2

func1 の成功時に fun2 を呼び出す

function func1(){
  $.ajax({
    url:'',

    success:function(){
         func2();
    }  
  })
于 2012-09-20T16:31:28.270 に答える