| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1549 人关注过本帖
标题:[讨论]AJAX的脚本执行次序问题-->islet转移
只看楼主 加入收藏
nightheart
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-3-13
收藏
 问题点数:0 回复次数:3 
[讨论]AJAX的脚本执行次序问题-->islet转移
var conn;
function createXHR()
{
if (window.ActiveXObject)
{
conn=new ActiveXObject('Microsoft.XMLHTTP');
}
else if (window.XMLHttpRequest)
{
conn=new XMLHttpRequest();
}
}
function getData(URL)
{
var rt='';
createXHR();
conn.onreadystatechange=function execute()
{
if ((conn.readyState==4)&&(conn.status==200))
{
rt=conn.responseText;
}
}
conn.open("GET",URL,true);
conn.send(null);
alert('');
return rt;
}
上面的FUNCTION中alert的作用很有趣,如果不alert直接return rt,得到的仍将是赋的初值(空串),alert随便什么之后就好了
猜想是不是因为conn.send之后执行execute需要些时间,而alert引起的暂停为执行取得了这些时间?
刚接触AJAX,问的问题可能无聊了些,但还是希望大家能帮我分析分析
搜索更多相关主题的帖子: islet AJAX conn 脚本 Microsoft 
2006-10-25 11:34
yms123
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:209
帖 子:12488
专家分:19042
注 册:2004-7-17
收藏
得分:0 
个人认为AJAX在send时会请求服务器端页面,而当前页面虽然没有刷新,但服务器端的后台页面还是在由服务器执行并处理,这样服务器延迟会出现这种情况。
2006-10-27 22:55
fyi1106
Rank: 1
等 级:新手上路
帖 子:327
专家分:0
注 册:2006-10-14
收藏
得分:0 

在这句里:conn.open("GET",URL,true);
最后一个参数是ture,它指定了请求是异步的。
所谓异步,就是给send()开一个新的线程,让send()独立运行,而send()的一下条语句也立即执行。
如果设为false,就是指定请求是同步的。
所谓同步,就不为send()开一个新线程,要等send()全部执行(发送请求,等待服务器返回信息并执行完onreadystatechange()函数)之后,再执行send()之后的下一条语句。
所以你上面的解决方法为:把conn.open("GET",URL,true);改为conn.open("GET",URL,false);就可以不要alert('')了。
这样就等服务器返回了信息之后,给rt赋了值,再把rt给return回去。


JavaScript forever!
2006-10-29 01:11
nightheart
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-3-13
收藏
得分:0 
谢谢两位
暂时按“拉登”老兄 办法实现了
好在每次交互的数据量都不大
2006-10-30 10:43
快速回复:[讨论]AJAX的脚本执行次序问题-->islet转移
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019736 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved