nightheart 发表于 2006-10-25 11:34

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

var conn;<BR>function createXHR()<BR>{<BR>    if (window.ActiveXObject)<BR>    {<BR>        conn=new ActiveXObject('Microsoft.XMLHTTP');<BR>    }<BR>    else if (window.XMLHttpRequest)<BR>    {<BR>        conn=new XMLHttpRequest();<BR>    }<BR>}<BR>function getData(URL)<BR>{<BR>    var rt='';<BR>    createXHR();<BR>    conn.onreadystatechange=function execute()<BR>    {<BR>        if ((conn.readyState==4)&amp;&amp;(conn.status==200))<BR>        {<BR>            rt=conn.responseText;<BR>        }<BR>    }<BR>    conn.open("GET",URL,true);<BR>    conn.send(null);<BR>    alert('');<BR>    return rt;<BR>}<BR>上面的FUNCTION中alert的作用很有趣,如果不alert直接return rt,得到的仍将是赋的初值(空串),alert随便什么之后就好了<BR>猜想是不是因为conn.send之后执行execute需要些时间,而alert引起的暂停为执行取得了这些时间?<BR>刚接触AJAX,问的问题可能无聊了些,但还是希望大家能帮我分析分析

yms123 发表于 2006-10-27 22:55

个人认为AJAX在send时会请求服务器端页面,而当前页面虽然没有刷新,但服务器端的后台页面还是在由服务器执行并处理,这样服务器延迟会出现这种情况。

fyi1106 发表于 2006-10-29 01:11

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

nightheart 发表于 2006-10-30 10:43

谢谢两位<BR>暂时按“拉登”老兄 办法实现了<BR>好在每次交互的数据量都不大

页: [1]

编程论坛