为什么函数不返回值?

时间:2013-05-13 11:33:45

标签: javascript buckets

我有一个使用库Buckets的javaScript函数,它应该将值返回给html。 我使用console.log来查看函数内部的数据,它不是null。但是在html上,它说“未定义”。

这是我的js代码:

function transformToStruct(xmlData) 
{
    var data = xmlData.item;
    var myReturn;
    $.getScript("buckets-minified.js", function() 
    {
        var treeData = new buckets.MultiDictionary();
        $.each(data, function(i,val) 
        {
            if(typeof data == 'object') 
            {
                $.each(val, function(j, childVal) 
                {
                    var dict = new buckets.Dictionary();
                    dict.set(val["NodeId"]["#text"], val["NodeText"]["#text"]);
                    treeData.set(val["ParentId"]["#text"], dict);

                });
            }
        });
        console.log(treeData)
        return treeData;        
    });
}

这是在我称之为transformToStruct函数的html页面上:

var myGTP = new buckets.MultiDictionary();

$.ajax({
    url: "http://frparlself6.dhcp.par.xxxx.corp:8000/com/sap/st/ltst/LTST_Backend/frontAccess/example.xsjs?structureId=" + structureId,
    dataType : 'jsonp',
    type:'GET'
}).always(function() {      
    var sXml = _JSONFromHANA.body
    var xmlData = $.parseXML(sXml);
    var xml = xmlToJson(xmlData);
    var items = xml["soap-env:Envelope"]["soap-env:Body"]["n0:_-qte_-rfcReadStrucNodesResponse"]["EtNodes"];
    myGTP = transformToStruct(items);
    console.log(myGTP);
}); 

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

treeData是您作为参数传递给函数getScript的匿名函数的返回值。您的函数transformToStruct实际上没有自己的返回值,因此它undefined就不足为奇了。由于getScript异步工作,您可以使用回调而不是返回值:

function transformToStruct(xmlData, callback) 
{
var data = xmlData.item;
var myReturn;
$.getScript("buckets-minified.js", function() 
{
    var treeData = new buckets.MultiDictionary();
    $.each(data, function(i,val) 
    {
        if(typeof data == 'object') 
        {
            $.each(val, function(j, childVal) 
            {
                var dict = new buckets.Dictionary();
                dict.set(val["NodeId"]["#text"], val["NodeText"]["#text"]);
                treeData.set(val["ParentId"]["#text"], dict);

            });
        }
    });
    console.log(treeData)
    callback(treeData);        
});
}

您的函数调用将如下所示:

var myGTP = new buckets.MultiDictionary();

$.ajax({
    url: "http://frparlself6.dhcp.par.xxxx.corp:8000/com/sap/st/ltst/LTST_Backend/frontAccess/example.xsjs?structureId=" + structureId,
    dataType : 'jsonp',
    type:'GET'
}).always(function() {      
    var sXml = _JSONFromHANA.body
    var xmlData = $.parseXML(sXml);
    var xml = xmlToJson(xmlData);
    var items = xml["soap-env:Envelope"]["soap-env:Body"]["n0:_-qte_-rfcReadStrucNodesResponse"]["EtNodes"];
    transformToStruct(items, function(result) {
        myGTP = result;
        console.log(myGTP);
    });

}); 

但正如评论中所提到的,你应该首先阅读有关异步函数的内容。