注册 登录
编程论坛 jQuery论坛

[讨论]AJAX的脚本执行次序问题-->islet转移

nightheart 发布于 2006-10-25 11:34, 1550 次点击
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,问的问题可能无聊了些,但还是希望大家能帮我分析分析
3 回复
#2
yms1232006-10-27 22:55
个人认为AJAX在send时会请求服务器端页面,而当前页面虽然没有刷新,但服务器端的后台页面还是在由服务器执行并处理,这样服务器延迟会出现这种情况。
#3
fyi11062006-10-29 01:11

在这句里: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回去。

#4
nightheart2006-10-30 10:43
谢谢两位
暂时按“拉登”老兄 办法实现了
好在每次交互的数据量都不大
1