2011-05-19 43 views
2

嗨 我想調用兩個用戶定義的函數,期待第一個必須先執行然後第二個......但它們正在同時執行。在jquery中調用兩個用戶定義的函數

$.firstfunc = function(){ 
//Do something 
//jQuery.ajax({ 
}); 

$.secondfunc = function(){ 
//Do something 
jQuery.ajax({ 
}); 

$.(document).ready(function(){ 
$.firstfunc(); 
$.secondfunc(); 
}); 

任何幫助,將不勝感激。

謝謝!

+0

而且你想用什麼命令?如果你希望secondfunc只在第一個Ajax響應後才執行,請在firstfunc ajax的成功函數中調用'secondfunc'。 – 2011-05-19 18:59:26

回答

10

警告:需要的jQuery 1.5 +

$.firstfunc = function() { 
    return $.ajax({}); 
} 

$.secondfunc = function() { 
    return $.ajax({}); 
} 

$(function() { 
    $.when($.firstfunc).then($.secondfunc); 
}); 

使用的$.Deferred的和$.when魔法。

它基本上說當你第一個函數完成它的ajax調用然後調用第二個函數。

這是因爲$.ajax返回從$.Deferred繼承的jqXHR對象。

如果您要附加一個回調當兩個$.firstfunc$.secondfunc完整的,那麼你可以做以下(需要的jQuery 1.6):

$(function() { 
    $.first().pipe($.second).done(function(second_data) { 
    // both finished. 
    }); 
}); 

遺產:的jQuery 1.4.2 & 1.3.2支持。

$.firstfunc = function(cb) { 
    $.ajax({ 
    success: function() { 
     ... 
     cb(); 
    }, 
    ... 
    }); 
} 

$.secondfunc = ... 

$(function() { 
    $.firstfunc($.secondfunc); 
}); 
+0

+1好答案,但你應該鏈接他的文檔。 – Chad 2011-05-19 19:00:13

+3

啊,是的,延期功能。我仍然不知道如何使用它們! +1 – user113716 2011-05-19 19:01:00

+0

@patrick_dw語法糖很棒:)另外'.pipe'對於中間件來說非常棒。 – Raynos 2011-05-19 19:03:48

0

第一個函數在代碼之後調用第二個函數。

function firstfunc() { 
    // Do something 

    secondfunc(); 
} 

function secondfunc() { 
    // Do something else 
} 

編輯(現在,我看到您的編輯):

使用的AJAX功能的回調部分。

$.get("somepage.php", "key1=value1&key2=value2", function(data) { 
    // This code will run when the result is received 
}); 
+0

@Chad:在我寫這篇文章的時候,OP沒有提到ajax。我已經編輯過。 – dtbarne 2011-05-19 19:01:16

0

發生這種情況是因爲Ajax請求是異步處理的。如果您希望第二個函數在第一個函數之後運行,請將其添加到第一個Ajax請求的回調函數中。

0

您應該從第一個.ajax調用的回調調用第二個。

你可以明確地定義它:

$.firstfunc = function(){ 
    //Do something 
    jQuery.ajax({ 
     callback:$.secondfunc 
    }); 
}; 

$.secondfunc = function(){ 
    //Do something 
    jQuery.ajax({ 
    }); 
}; 

$(document).ready(function(){ 
    $.firstfunc(); 
}); 

...或者它作爲參數傳遞:

$.firstfunc = function(func){ 
    //Do something 
    jQuery.ajax({ 
     callback:func 
    }); 
}; 

$.secondfunc = function(){ 
    //Do something 
    jQuery.ajax({ 
    }); 
}; 

$(document).ready(function(){ 
    $.firstfunc($.secondfunc); 
}); 
相關問題