2010-09-14 3 views
0

J'ai un problème avec la méthode jquery.Jquery - Fonction de démarrage lorsque chacun est prêt

Mon objet

first_obj = {}; 
first_obj[11] = new Array('http://blub.de', 'hsdfe', 'hsdfe'); 
first_obj[54] = new Array('http://blub.de', 'sdfe', 'hsdfde'); 
first_obj[99] = new Array('http://blub.de', 'sdf', 'sdfde'); 

obtenir des résultats et l'insérer dans l'objet "second_obj_results"

second_obj_results = {}; 
    $.each(first_obj, function(i, val) 
    {  
     var feed = new google.feeds.Feed("http://www.digg.com/rss/index.xml"); 
     feed.load(function(result) { 
     if (!result.error) { 
      var container = document.getElementById("feed"); 
      for (var i = 0; i < result.feed.entries.length; i++) 
      { 
      second_obj_results[id] = new Array(''+rsd+'', ''+rtitle+'', ''+fege+''); // Create new obj with the results 
      } 
     } 
    )}; 
    read_new_obj(); 

et voici mon problème

Quand je dis read_new_obj(); ... // ré travail Ontario

et quand je dis setTimeout('read_new_obj();',2000); ... // cela fonctionne

Lire la nouvelle obj

function read_new_obj() 
{ 

    $.each(second_obj_results, function(i, val) 
    { 


    // do something 

    }); 


}  

Je pense que le problème est que le « obtenir des résultats » n'est pas fini. Mais la solution avec le Timeout est très mauvaise. Il est possible que le "Obtenir des résultats" nécessite plus de temps que 2 secondes.

Comment puis-je dire si "chaque premier_objet" est prêt -> Démarrer la fonction "read_new_obj"?

Merci d'avance! Peter

PS:.? Désolé pour mon mauvais anglais :(

Répondre

1

il semble que le feed.load() prend une fonction de rappel comme paramètre Je suppose que ce rappel est déclenché lorsque des données arrivent
Si tel est le cas, mettre votre méthode read_new_obj() droit dans ce rappel.

feed.load(function(result) { 
    if (!result.error) { 
     var container = document.getElementById("feed"); 
     for (var i = 0; i < result.feed.entries.length; i++) 
     { 
     second_obj_results[id] = new Array(''+rsd+'', ''+rtitle+'', ''+fege+''); 
     } 
     read_new_obj(); 
    } 
)}; 

Je ne sais pas google ajax api très bien, mais je suis assez sûr .load() va lancer un asynchronous request. ainsi, votre read_new_obj() est exécuté avant la fin de la fonction .load().

+0

Salut jAndy, ça marche mais la fonction démarre 3 fois. – Peter

+0

Je comprends. -> google.setOnLoadCallback(). http://translate.google.de/translate?hl=de&sl=auto&tl=fr&u=http%3A%2F%2Fwww.betawax.de%2Fblog%2F2010%2F03%2Fjquery-ready-google-load%2F – Peter

+0

@Peter : Cela devrait être votre résultat souhaité. Vous êtes en boucle sur le 'first_obj' qui contient trois entrys. Eh bien, mais on dirait que vous n'utilisez pas cette information, assez confuse. Je m'attendais à ce que vous utilisiez la première entrée de votre tableau 'first_obj' pour accéder à cette URL. – jAndy

Questions connexes