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

1 回答 1

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();
}
于 2012-11-05T20:43:35.167 回答