如何在第一次执行后调用第二个函数?

时间:2014-04-10 08:39:32

标签: javascript jquery

我在变更事件上调用了两个函数。

function1();
function2();

function1():是一个ajax呼叫
function2():在function1()之前执行。

为什么会这样?

任何帮助?

6 个答案:

答案 0 :(得分:3)

Ajax的第一个A表示asynchronous,即常规Javascript程序流将在Ajax请求仍在处理时继续。因此,function2将在从function1启动的Ajax请求完成之前执行。

解决方案:Javascript中的每个异步方法都会为您提供一个所谓的callback,这是一个在异步方法完成后调用的函数。在jQuery.ajax()中,此回调随参数success一起提供。如果您将此呼叫置于此function2内,则可以正常使用。

function1() {
   ...
   $.ajax({
      url: '...',
      type: 'GET',
      success: function(data) {
         // this will be executed after the asynchronous method finishes
         function2();
      }
   });
}

答案 1 :(得分:1)

Please look at the code written below:

function1() {
  $.ajax({
  url: myurl,
  type: 'GET',
  async:false,
  success: function(response) {
     function2();
  }
 });
}

请注意,“async:false”将确保成功方法在成功执行第一个函数时调用。所以你应该使用“async:false”来确保function2()在function1()之后调用。

答案 2 :(得分:0)

如果function1()是ajax函数,则在ajax成功时调用function2()

如果您使用的是jquery ajax

function1() {
   $.ajax({
      url: myurl,
      type: 'GET',
      success: function(response) {
         function2();
      }
   });
}

答案 3 :(得分:0)

在Ajax成功响应后调用你的function2。

function function1()
{
  //Ajax Call
  ..
  ..

  if (xmlhttp.readyState==4 && xmlhttp.status==200)
  {
    function2();
  }
}

答案 4 :(得分:0)

通常像这样打电话

function1(function() { 

           function2(); 

        });

如果是这样的Ajax调用

function function1() {
    $.ajax({
        url: "url",
        type: 'POST',
    }).success(function (html) {
        function2();
    });
}

Fiddle

答案 5 :(得分:0)

jQuery ajax返回延迟对象(http://api.jquery.com/category/deferred-object/),它对你这样的东西非常有用。顺便说一句,延迟对象支持链接模式,这样就可以调用多个函数。

所以,要一个接一个地运行一个函数,你可以做下一个

function ajaxCall(){
   return $.get('your/api/call', {param:1});
}

function fun1(){
   console.log('Function 1 was called');
}

function fun2(){
   console.log('Function 2 was called');
}


ajaxCall().done(fun1).done(fun2);

或者您可以使用$ .when

$.when( $.get('your/api/call') )
   .then(function(){ alert(1); })
   .then(function(){ alert(2); });

有用的链接:

jQuery ajax

jQuery when

jQuery deferred