2014-04-10 272 views
1

我打電話給改變事件的兩個函數。如何在第一次執行後調用第二個函數?

function1(); 
function2(); 

function1():是一個Ajax調用
function2():功能1之前得到執行()。

這是怎麼發生的?

任何幫助?

+2

函數1必須接受一個回調方法,其中你將調用function2 ...回調將在ajax調用完成後執行 –

+1

你可以從http://stackoverflow.com/questions獲得一個基本的想法/ 14220321 /如何返回ajax調用的響應 –

+0

您需要了解更多關於兩個概念的信息1)Ajax調用以及它們如何異步。 2)Javascript回調。閱讀這兩個,你就會知道爲什麼會發生這種情況。 – Nikhil

回答

1
Please look at the code written below: 

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

請注意,這裏的 「異步:假」 將確保成功的方法調用當第一次功能已成功執行。所以你應該使用「async:false」來確保function2()將在function1()之後調用。

0

如果function1()然後AJAX功能在你的Ajax

成功調用function2()如果你正在使用jQuery阿賈克斯

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

從阿賈克斯成功響應後調用你的函數2。

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

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

Ajax第一A意味着asynchronous,即同時仍在處理Ajax請求經常JavaScript程序流程將繼續。因此,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(); 
     } 
    }); 
} 
0

通常這樣調用

function1(function() { 

      function2(); 

     }); 

如果是Ajax調用這樣

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

Fiddle

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($.get('your/api/call')) 
    .then(function(){ alert(1); }) 
    .then(function(){ alert(2); }); 

有用的鏈接:

jQuery ajax

jQuery when

jQuery deferred

相關問題