2014-11-24 26 views
0

我有一個解析來自回調函數的json數據作爲函數參數的問題。從jquery回調函數獲取json數據

調用函數buildUL(ul,getJsonData());是因爲getJsonData();不要返回json數據。它有它自己的回報。

如何編寫回調函數的正確方法?

function getJsonData() 
{ 
    $.ajax({ 
     async: false, 
     url: 'ajax/menu.json', 
     success: buildData 
    }); 
    // return false; 
} 
; 


function buildData(jsonData) { 
    var data = jsonData; 
    //alert(data); 

    var source = []; 
    var items = []; 
    // build hierarchical source. 
    for (i = 0; i < data.length; i++) { 
     var item = data[i]; 
     var label = item["text"]; 
     var parentid = item["parentid"]; 
     var id = item["id"]; 

     if (items[parentid]) { 
      var item = {parentid: parentid, label: label, item: item}; 
      if (!items[parentid].items) { 
       items[parentid].items = []; 
      } 
      items[parentid].items[items[parentid].items.length] = item; 
      items[id] = item; 
     } 
     else { 
      items[id] = {parentid: parentid, label: label, item: item}; 
      source[id] = items[id]; 
     } 
    } 
    return source; 


} 
; 


function buildUL(parent, items) { 

    $.each(items, function() { 
     if (this.label) { 
      // create LI element and append it to the parent element. 
      var li = $("<li>" + this.label + "</li>"); 
      li.appendTo(parent); 
      // if there are sub items, call the buildUL function. 
      if (this.items && this.items.length > 0) { 
       var ul = $("<ul></ul>"); 
       ul.appendTo(li); 
       buildUL(ul, this.items); 
      } 
     } 
    }); 
} 
; 


var ul = $("<ul></ul>"); 
ul.appendTo("#testmenu"); 


buildUL(ul, getJsonData()); 

錯誤:類型錯誤:一個是不確定的

回答

0

答案很簡單,因爲請求創建一個命名空間和數據不按功能成功返回。 那麼你應該這樣工作:

$.ajax({ 
    url: 'ajax/menu.json', 
    success: function(response){ 
     //here I do that I want with data from response 
     //sample: 
     $('#username').text(response['username']); 
     alert(response['username']); 
    } 
});