Javascript 为什么函数没有';不返回值吗?
我有一个使用库bucket的javaScript函数,它应该将值返回到html。 我使用console.log查看函数中的数据,它不是null。但在html上,它表示“未定义” 这是我的js代码:Javascript 为什么函数没有';不返回值吗?,javascript,buckets,Javascript,Buckets,我有一个使用库bucket的javaScript函数,它应该将值返回到html。 我使用console.log查看函数中的数据,它不是null。但在html上,它表示“未定义” 这是我的js代码: function transformToStruct(xmlData) { var data = xmlData.item; var myReturn; $.getScript("buckets-minified.js", function() {
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);
});
有什么想法吗?
treeData
是匿名函数的返回值,作为参数传递给函数getScript
。函数transformToStruct
实际上没有自己的返回值,因此它未定义也就不足为奇了。由于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);
});
});
但正如评论中提到的,您可能应该首先阅读一些关于异步函数的内容。您需要了解异步调用和函数中的函数。我以前从未了解过异步。我对javaScript和jQuery非常陌生。谢谢。