2013-05-13 4 views
0

라이브러리 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); 
}); 

어떤 아이디어?

+2

함수 내에서 비동기 호출 및 함수를 이해해야합니다. –

답변

0

treeData은 함수 getScript에 대한 인수로 전달하는 익명 함수의 반환 값입니다. 함수 transformToStruct에는 실제로는 고유 한 반환 값이 없으므로 undefined이라는 것이 놀랍지 않습니다.

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

귀하의 함수 호출은 다음과 같을 것이다 : getScript는 비동기 적으로 작동하기 때문에 대신 반환 값의 콜백을 사용할 수

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

관련 문제