2013-05-13 508 views
0

我有一個使用庫Buckets的javaScript函數,它應該返回值爲html。 我用console.log來查看函數內部的數據,它不爲空。但在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;   
    }); 
} 

這是HTML頁面,我稱之爲transformToStruct功能上:

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

任何想法?

+2

您需要了解函數內的異步調用和函數。 – 2013-05-13 11:35:43

回答

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

}); 

但由於在評論中提到的,你應該讀的東西關於異步函數。

+0

我從來不知道異步之前。我在javaScript和jQuery中很新。非常感謝。 – user2335149 2013-05-13 11:57:33

相關問題