2010-04-08 66 views
0

函數socialbookmarksTableData(data)被另一個函數調用來生成一個表的內容 - data是一個JSON對象。在函數內部,我調用2個使用getJSON和POST(以json作爲返回對象)的其他函數來獲取一些數據。問題是:雖然函數正確執行,但我得到了2個變量(bookmarkingSites,bookmarkCategories)的未定義值。請幫助解決方案。jquery控件執行回調函數

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

回答

0

您從回調函數中返回變量,而不是實際調用的函數。在調用回調函數後,控制權返回給沒有返回語句的函數,所以默認情況下它們'返回'未定義。您需要從socialbookmarksGetBookmarkCategories和socialbookmarksGetBookmarkSites中返回值,而不僅僅是來自其中的回調函數。

+0

現在我得到一個空字符串。 – user253530 2010-04-08 04:51:50

0

您需要執行socialbookmarksTableData函數中的代碼作爲對$.getJSON調用的響應。問題是你馬上回來,但JSON回調尚未開始。