学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
轻松建立自己的群组,招兵买马   
发新话题
打印

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

[讨论]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,问的问题可能无聊了些,但还是希望大家能帮我分析分析

TOP

个人认为AJAX在send时会请求服务器端页面,而当前页面虽然没有刷新,但服务器端的后台页面还是在由服务器执行并处理,这样服务器延迟会出现这种情况。
http://www.lxzhcn.net
版块版主招募中
网站论坛发帖无问题,欢迎发帖。

TOP

在这句里: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!

TOP

谢谢两位
暂时按“拉登”老兄 办法实现了
好在每次交互的数据量都不大
欢迎到我的小站http://www.dewsong.net指导。

TOP

发新话题