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

在第一个ajax函数调用完全完成后,Jquery继续执行另一个ajax函数,ajax,jquery,Ajax,Jquery,我在两个不同的函数中有两个ajax调用。我想使用。单击可调用这两个函数 . func1将数据插入数据库,然后func2将检索数据,所以我的问题是如何等到func1完全完成,然后只执行func2 我试过了。delay(),但我认为这是一个愚蠢的解决方案 $("#updateLocation").click(function(e){ e.preventdefault; func1(); func2(); }); return f

我在两个不同的函数中有两个ajax调用。我想使用。单击可调用这两个函数 . func1将数据插入数据库,然后func2将检索数据,所以我的问题是如何等到func1完全完成,然后只执行func2

我试过了。delay(),但我认为这是一个愚蠢的解决方案

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

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

    function func2(){
      $.ajax({
        url:'',
      });
});
您可以将选项“async”设置为false(对于第一个ajax调用)

这意味着函数2将在函数1收到响应后调用,即完成其执行

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

将func2移动到func1->ajax->成功回调中

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

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

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

在func1成功时调用fun2

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

    success:function(){
         func2();
    }  
  })
三种方式:

在func1成功时调用func2:

    function func1() {
       $.ajax({ ... }).done(func2);
    }
当funky完成时,使用
Deferred
API调用func2:

    e.preventDefault();
    $.when(func1).then(func2);
使func1同步(不推荐):


由于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");
  }
});

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

您还可以将函数作为如下参数传递:

var secondFunc = function (func) {

    //Do ajax req or smt
    func("answer", "params");

};
var firstFunc = function() {

    secondFunc(
        function (answerFromFunc2, paramsFromfunc2) {

            var a = answerFromFunc2;
            var b = paramsFromfunc2;

        }
    );

    //Do smt after the function request to the server is done
    var doSmt = "another func or variable";

};
firstFunc();

请记住,这样做会暂停整个脚本并导致它“挂起”,直到(现在是同步的)操作完成!这里需要注意的是:这个回复和AJAX async:false选项现在被弃用已经很久了。这是最简单的形式!稍有不同的是,您有两个独立的ajax调用,您只想异步调用,但当两个调用都完成时,您想启动第三个,应该是
$。when(func1,func2)。然后(func3)
也可以通过使用async/await函数的较新JS语法来完成(可能需要Babel,但要在浏览器中工作):这里只是一个注释,因为问题是关于AJAX的。
var secondFunc = function (func) {

    //Do ajax req or smt
    func("answer", "params");

};
var firstFunc = function() {

    secondFunc(
        function (answerFromFunc2, paramsFromfunc2) {

            var a = answerFromFunc2;
            var b = paramsFromfunc2;

        }
    );

    //Do smt after the function request to the server is done
    var doSmt = "another func or variable";

};
firstFunc();