读书人

如何才能让function返回(return)获取到

发布时间: 2012-02-13 17:20:26 作者: rapoo

怎么才能让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.

读书人网 >JavaScript

热点推荐