从jquery回调函数中获取json数据

时间:2014-11-24 21:52:37

标签: javascript jquery json jquery-callback

我将回调函数中的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());

错误:TypeError:a未定义

1 个答案:

答案 0 :(得分: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']);
    }
});