2012-11-05 95 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