2010-04-08 5 views
0

Fonction socialbookmarksTableData (données) est appelé par une autre fonction pour générer le contenu d'une table - les données sont un objet JSON. Dans la fonction, j'appelle 2 autres fonctions qui utilisent getJSON et POST (avec json comme objet de retour) pour obtenir des données. Le problème est le suivant: bien que les fonctions s'exécutent correctement, j'obtiens une valeur indéfinie pour les 2 variables (bookmarkingSites, bookmarkCategories). Aidez avec une solution s'il vous plaît.jquery contrôle l'exécution des fonctions de rappel

function socialbookmarksGetBookmarkCategories(bookmarkID) 
    { 
     var toReturn = ''; 
     $.post("php/socialbookmark-get-bookmark-categories.php",{ 
      bookmarkID: bookmarkID 
     },function(data){ 
      $.each(data,function(i,categID){ 
       toReturn += '<option value ="' + data[i].categID + '">' + data[i].categName + '</option>'; 
      }) 
      return toReturn; 
     },"JSON"); 
    } 

    function socialbookmarksGetBookmarkSites() 
    { 
     var bookmarkingSites = ''; 
     $.getJSON("php/socialbookmark-get-bookmarking-sites.php",function(bookmarks){ 

      for(var i = 0; i < bookmarks.length; i++){ 
       //alert(bookmarks[i].id); 
       bookmarkingSites += '<option value = "' + bookmarks[i].id + '">' + bookmarks[i].title + '</option>'; 
      } 
      return bookmarkingSites; 
     }); 
    } 
    function socialbookmarksTableData(data) 
    { 
     var toAppend = ''; 
     var bookmarkingSites = socialbookmarksGetBookmarkSites(); 


     $.each(data.results, function(i, id){ 

      var bookmarkCategories = socialbookmarksGetBookmarkCategories(data.results[i].bookmarkID); 
    //rest of the code is not important 
     }); 
    $("#searchTable tbody").append(toAppend); 
} 

Répondre

0

Vous renvoyez les variables à partir des fonctions de rappel, pas les fonctions que vous appelez réellement. Une fois les fonctions de rappel appelées, le contrôle est renvoyé aux fonctions qui n'ont pas d'instruction de retour. Par conséquent, elles retournent undefined par défaut. Vous devez renvoyer les valeurs de socialbookmarksGetBookmarkCategories et de socialbookmarksGetBookmarkSites non seulement à partir des fonctions de rappel qu'elles contiennent.

+0

maintenant je reçois une chaîne vide. – user253530

0

Vous devez exécuter le code dans votre fonction socialbookmarksTableData en réponse à l'appel $.getJSON. Le problème est que vous revenez tout de suite, mais le rappel JSON n'a pas encore été déclenché.