2010-01-11 2 views
1

J'ai un snipet de code comme ceci:créer une fonction de rappel au lieu d'utiliser un var drapeau pour contrôler quand une fonction spécifique est fait


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; 
} 

ne regarde pas beaucoup pratique parce que je suis en utilisant une boucle pour faire il attend jusqu'à ce que la fonction soit exécutée de manière compétente pour effectuer l'étape suivante.

Existe-t-il un moyen de définir un message de rappel à appeler lorsque la première opération est terminée et d'avoir ma deuxième étape (l'appel $ .ajax) à l'intérieur pour fonctionner correctement?

Merci d'avance! Teixeira

+0

+1, astuce, je n'aurais jamais pensé – karim79

Répondre

3

Vous pouvez créer votre callback vous-même en utilisant la fonction apply. Il suffit d'ajouter un paramètre callback à getArticlesPreview et de mettre la fonction dans ce rappel.

Cela pourrait ressembler à ceci:

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

Dans ce cas, vous n'avez pas besoin appliquer, vous ne pouvez exécuter le rappel en fonction anonyme. "rappeler()". Mais encore +1. – nemisj

+0

Grands types! Merci beaucoup pour la bonne contribution! –

Questions connexes