2010-01-11 55 views
1

我有一小段代碼片段像這樣控制一個回調函數:創建的,而不是使用標誌VAR當特定功能完成


var nbrPrevArt = $("#accordion > div .accordionPanel").size(); 
var processing = false; 

if (nbrPrevArt == 0) { 
    processing = true; 
    getArticlesPreview();//Fetches articles first 
} 

//loop that makes the browser to wait until finishes "getArticlesPreview()" 
while(!processing) 
{ 
} 

//getArticlesPreview() is finished now we can safely execute this step 
$.ajax({ 
    type: "GET", 
    url: "http://mydomain.com/somepage.htl", 
    success: function(data) { alert(data);} 
}); 


//----------------------------------- 

function getArticlesPreview() 
{ 
    //lenghty operation 
    processing = false; 
} 

,因爲我使用的是循環,使不看太大的實際它會等待函數被完全執行以執行下一步。

當第一個操作完成並且讓我的第二步($ .ajax調用)正常運行時,是否有方法定義要調用的回調消息?

預先感謝您! 特謝拉

+0

+1,好的技巧,我從來沒有想過這 – karim79 2010-01-11 10:20:20

回答

3

您可以使用apply函數自己創建回調函數。您必須將callback參數添加到getArticlesPreview,並將此函數放入此回調中。

這可能是這樣的:

function makeAjax() 
{ 
    $.ajax({ 
     type: "GET", 
     url: "http://mydomain.com/somepage.htl", 
     success: function(data) { alert(data);} 
    }); 
} 

function getArticlesPreview(callback) 
{ 
    //lenghty operation 

    callback.apply(this) 
} 

var nbrPrevArt = $("#accordion > div .accordionPanel").size(); 

if (nbrPrevArt == 0) { 
    getArticlesPreview(makeAjax); 
} 
+0

的在這種情況下,你不需要申請,你就可以執行回調的匿名函數。 「回電話()」。但仍然+1。 – nemisj 2010-01-11 10:31:39

+0

大傢伙!非常感謝您的寶貴意見! – 2010-01-11 10:36:32

相關問題