2010-01-11 1 views
1

У меня есть код snipet вроде этого:создать функцию обратного вызова, вместо того, чтобы использовать вар флага для управления, когда определенная функция выполняется


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) внутри него работал правильно?

Спасибо заранее! Teixeira

+0

+1, хороший трюк, я никогда бы не подумал, что – karim79

ответ

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

+0

Отличные парни! Большое спасибо за большой вклад! –

Смежные вопросы