2012-11-05 97 views
1

想知道是否有人可以幫助回答我的問題,我需要從「數據」中獲取xml內容,因爲它是在yam_send函數內的嵌套函數中定義的,我試圖使用return來獲取該變量回到函數'GetBasicStatus',但它並沒有得到所有的方式,任何人都可以擺脫這種情況。對不起,如果這是一個明顯的解決方案,我害怕一個初學者的位。從嵌套函數獲取變量

function GetBasicStatus() 

    { 
     //do some stuff & define variable "command" 
     data = yam_send(command); 

     if (window.DOMParser) 
     { 
      parser=new DOMParser(); 
      xmlDoc=parser.parseFromString(data,"text/xml"); 
     } 
     else // Internet Explorer 
     { 
      xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
      xmlDoc.async=false; 
      xmlDoc.loadXML(data); 
     } 
    } 

    function yam_send(str) 
    { 

     var xmlhttp; 

     if (window.XMLHttpRequest) 

     {// code for IE7+, Firefox, Chrome, Opera, Safari 

     xmlhttp=new XMLHttpRequest(); 

     } 

    else 

     { 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 


    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      var data=xmlhttp.responseText; 
      return data; 
     } 


    } 
    xmlhttp.open("GET","test.php?str",true); 
    xmlhttp.send(); 
    } 
+1

JavaScript!= Java。 –

+0

感謝Jon的領導,這解釋了很多! :-) –

回答

1

作爲xmlhttp.onreadystatechange提供的功能是回調。它在事件發生時執行並且不能返回任何內容到「父」功能。

您可以在父函數中創建一些變量,並在回調中爲其分配一些值。或者使用父功能作爲回調,如下所示:

var xmlResponse = null; //variable for usage outside of GetBasicStatus 
function GetBasicStatus(data) { 
    xmlResponse = data; //now you can use it. 
    if (window.DOMParser) 
    { 
     parser=new DOMParser(); 
     xmlDoc=parser.parseFromString(data,"text/xml"); 
    } 
    else // Internet Explorer 
    { 
     xmlDoc=new ActiveXObject("Microsoft.XMLDOM"); 
     xmlDoc.async=false; 
     xmlDoc.loadXML(data); 
    } 
} 

function yam_send(str) 
{ 
    var xmlhttp; 

    if (window.XMLHttpRequest) 
     {// code for IE7+, Firefox, Chrome, Opera, Safari 
      xmlhttp=new XMLHttpRequest(); 
     } 
    else 
     { 
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
     } 

    xmlhttp.onreadystatechange=function() 
     { 
      if (xmlhttp.readyState==4 && xmlhttp.status==200) 
      { 
       var data=xmlhttp.responseText; 
       GetBasicStatus(data); 
      } 
     } 
    xmlhttp.open("GET","test.php?str",true); 
    xmlhttp.send(); 
} 
+0

Zlebnik感謝您的評論;它是我需要的xmlhttp.responseText,我怎麼能在回調之外使用這個,我可以使用這個來爲HTML元素賦值,但是我需要能夠在另一個函數中處理結果,我有一種感覺我只是從錯誤的角度來解決問題? –

+0

添加示例用法 – zlebnik