在第一个ajax函数调用完全完成后,Jquery继续另一个ajax函数

vzh*_*hen 17 ajax jquery

我在2个差异函数中有2个ajax调用.我想用.click来调用这两个函数.func1将数据插入数据库,然后func2将检索数据,所以我的问题是如何等待func1完全完成然后它只执行func2.

我试过.delay(),它有效,但我认为这是一个愚蠢的解决方案.

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

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

    function func2(){
      $.ajax({
        url:'',
      });
})?
Run Code Online (Sandbox Code Playgroud)

Exp*_*lls 29

三种方式:

func1成功时调用func2:

    function func1() {
       $.ajax({ ... }).done(func2);
    }
Run Code Online (Sandbox Code Playgroud)

Deferred在funky完成时使用API调用func2:

    e.preventDefault();
    $.when(func1).then(func2);
Run Code Online (Sandbox Code Playgroud)

使func1同步(不推荐):

    function func1() {
       $.ajax({url: '', async: false});
    }
Run Code Online (Sandbox Code Playgroud)

  • 我总是喜欢这种有选择的答案 (3认同)

Tim*_*ote 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");
  }
});
Run Code Online (Sandbox Code Playgroud)

您将需要从成功处理程序中调用第二个AJAX函数.