ajax异步回调函数赋值

stlsm 2008-09-10 10:01:18
<script type="text/javascript">
var i;//全局变量
function jump()
{
WebServer.SysHello(Callback)//执行服务器上的webserver的SysHello函数
}
function Callback(result)
{
i=result; //返回的结果一个普通类型string

}

alert(i);//这里得不到i的值

</script>

我的问题是怎么样在异步的情况下得到i的值,谢谢!
...全文
280 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
lynn_9527 2008-12-03
  • 打赏
  • 举报
回复
7楼说的有道理,顶!
PowerAMD3794 2008-12-03
  • 打赏
  • 举报
回复
我也遇到了这个问题,折磨了我好长时间。后来我翻资料,看最基本的AJAX教程,最基本的知识,最后发现原来是自己根本

就没有理解到Ajax的真正工作原理和含义,而这些东西都是在每个Ajax教程第一节就会提到的。

问题就是在于Ajax是异步的,这个相对传统的form表单提交可能更好理解。form提交是客户端在等待,没有回应就不继续

运行下去;而Ajax的原理正相反,客户端不在乎你服务器是否相应,我该干嘛干嘛,当状态准备好了服务器端才会回调函数

所以楼主的代码这样的:


客户端发出请求--》服务器接受请求但没有就绪--》客户端继续运行(执行alert)--》服务器端准备就绪并调用回调函数


解决的办法就是把你要处理的代码全部写到回调函数里面,或者把XmlHttpRequest.open()函数最后一个参数对象设置为

“false” 默认的情况是 “true” 这个参数的意思是 是否启动 “异步” 但是如果设置 “false”个人认为有违Ajax

的真正初衷,也失去了Ajax的意义。
diamond911 2008-11-19
  • 打赏
  • 举报
回复
楼上正解
xchh1220 2008-09-10
  • 打赏
  • 举报
回复
调用的先后问题,AJAX调用需要时间,alert()在Callback()之前就调用了
xchh1220 2008-09-10
  • 打赏
  • 举报
回复
<script type="text/javascript">
var i;//全局变量
function jump()
{
WebServer.SysHello(Callback)//执行服务器上的webserver的SysHello函数
}
function Callback(result)
{
i=result; //返回的结果一个普通类型string
alert(i);//这里得不到i的值

}

</script>
stlsm 2008-09-10
  • 打赏
  • 举报
回复
而且这样做也不行啊,alert('数据准备中....请稍候...');
这个提示框,如果我很快就点一下,不是一样得不到它的值
stlsm 2008-09-10
  • 打赏
  • 举报
回复
var retObj = {ready:false;}
这句话怎么会出错呢?
mrshelly 2008-09-10
  • 打赏
  • 举报
回复
要在 CallBack 中,才能得到值.

或者

var retObj = {ready:false;}

....
function CallBack(...

retObj.ready=true;

}

使用时,

....

if(!retObj.ready){
alert('数据准备中....请稍候...');
return false;
}else{
//你的正常逻辑....

52,797

社区成员

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

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