日期:2014-05-16  浏览次数:20477 次

怎么才能让function返回(return)获取到的responseText?
我想在提交数据、并获得responseText的时候,直接让function返回(return)responseText给调用方,但怎么也做不出这种效果。 
下面是我写出的代码,在第一个Alert,弹出警告框是正确的ResponseText值,但是在function的结尾,再alert这个var,却又变成了没修改前的值。请问如何才能让子function修改掉父function的变量值? 


客户端程序: 
JScript code

<textarea name="xmls" cols="38" rows="12" id="xmls" > 
    <?xml version="1.0" encoding="UTF-8"? > 
    <svc_result ver="1.0.0">
        <slia ver="1.0.0">
            <action>testing </action>
        </slia>
    </svc_result > 
</textarea > 
<input value="提交"  type="button" onclick="submiter();"/ > 

<script language="javascript" > 
//获取表单中的XML文档 
//提交给testSSS.asp,同时获取返回值 
//再把返回值填写到表单中 

function submiter(){ 
    //获取表单中的XML 
    var xml; 
    xml = document.getElementById("xmls").value; 

    //构造url 
    var url; 
    url = "testSSS.asp"; 

    //调用提交函数 
    //并获取返回的XML 
    sendXML(url,xml); 
} 
</script > 



-------------------- 
客户端用到的接口代码: 
JScript code
 
function sendXML(url,xml){

var subURL;
subURL = url+"?xml="+xml;

var xmlobj;
xmlobj=createxmlhttp();
xmlobj.open("post",subURL, true);

var rsText;

rsText = "Nothing";
xmlobj.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlobj.onreadystatechange=function (){
if (xmlobj.readyState==4){
if(xmlobj.status==200){
sendXML.rsText = xmlobj.responseText;
alert(sendXML.rsText);//这里弹出的是responseText值
//rsText = xmlobj.responseText;//这种办法也测试过,效果一样
//alert(rsText);
}
}
};
xmlobj.send(null);

alert(rsText);//这里就变成了修改前的值:“Noting”
return rsText;
}

function createxmlhttp()
{
//create xmlhttp object
xmlhttpobj = false;
try{
xmlhttpobj = new XMLHttpRequest;
}catch(e){
try{
xmlhttpobj=new ActiveXObject("MSXML2.XMLHTTP");
}catch(e2){
try{
xmlhttpobj=new ActiveXObject("Microsoft.XMLHTTP");
}catch(e3){
xmlhttpobj = false;
}
}
}
return xmlhttpobj;
}


------------------------------------------------- 
TESSS.asp(服务器端、被请求页面)的代码: 
HTML code

<?xml version="1.0" encoding="UTF-8"? > 
<svc_result ver="1.0.0" > 
    <slia ver="1.0.0" > 
        <action >back XMLS </action > 
    </slia > 
</svc_result >



------解决方案--------------------
xmlobj.onreadystatechange是一个属性,指出xmlhttp对象的状态改变时要执行的函数,第一次执行sendXML(url,xml)时,nreadystatechange被赋直后,由于只异步执行,继续执行下去到你的第二个alert(rsText),然后返回return rsText,当然没有取得值.
想达到你的效果,必须让xmlhttp同步执行,就是改xmlobj.open("post",subURL, true); 为xmlobj.open("post",subURL, false); 这样就可以了,但是你应该做一下异常处理,防止出错时仍然返回rsText.