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

时间:2012-09-20 16:29: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:'',
      });
});

6 个答案:

答案 0 :(得分:26)

三种方式:

func1成功时调用func2:

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

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

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

使func1同步(不推荐):

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

答案 1 :(得分: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");
  }
});

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

答案 2 :(得分:4)

在func1-> ajax-> succes回调中移动func2

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

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

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

答案 3 :(得分:2)

func1

成功调用fun2
function func1(){
  $.ajax({
    url:'',

    success:function(){
         func2();
    }  
  })

答案 4 :(得分:1)

您可以将“async”选项设置为false(对于第一个ajax调用)。

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

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

答案 5 :(得分:0)

您也可以将您的函数作为参数传递:

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();