怎么才能让function返回(return)获取到的responseText?

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


客户端程序:

<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 >


--------------------------------------------------------
客户端用到的接口代码:

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(服务器端、被请求页面)的代码:

<?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 >
...全文
218 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
eye_of_back 2007-10-21
  • 打赏
  • 举报
回复
onreadystatechange指定函数或者代码是异步进行调用的,而rsText变量实际上是局部变量,你可以这样试一下:
一种方式:将rsText变量放到sendXML函数的外面。
另外一种方式:在异步方法中定义一个新变量:
rsText_new = xmlobj.responseText;//这种办法也测试过,效果一样
然后在 xmlobj.send(null);之后调用 alert(rsText_new);//
sartrecn 2007-10-21
  • 打赏
  • 举报
回复
发错了,应该是
http://topic.csdn.net/u/20071021/10/1642fbf3-169d-4aaa-ad65-5ceb357bd0f8.html
sartrecn 2007-10-21
  • 打赏
  • 举报
回复
请iamybj到
https://forum.csdn.net/PointForum/Manage/TopicManageView.aspx?forumID=d9b0dee7-e33f-4168-b14c-cc4940c76461&topicID=1642fbf3-169d-4aaa-ad65-5ceb357bd0f8&date=2007-10-21+10%3a44%3a35
报道一下,我在这个帖子上下的分多,谢谢!
sartrecn 2007-10-21
  • 打赏
  • 举报
回复
楼上正解~哈哈,
十分感谢!!!!!
iamybj 2007-10-21
  • 打赏
  • 举报
回复
xmlobj.onreadystatechange是一个属性,指出xmlhttp对象的状态改变时要执行的函数,第一次执行sendXML(url,xml)时,nreadystatechange被赋直后,由于只异步执行,继续执行下去到你的第二个alert(rsText),然后返回return rsText,当然没有取得值.
想达到你的效果,必须让xmlhttp同步执行,就是改xmlobj.open("post",subURL, true); 为xmlobj.open("post",subURL, false); 这样就可以了,但是你应该做一下异常处理,防止出错时仍然返回rsText.
sartrecn 2007-10-21
  • 打赏
  • 举报
回复
楼上的两种办法都测试了一下,都是出现一样的症状:第一次alert的结果是正确的,第二次alert就提示变量未定义。

87,921

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧