为什么我的setTimeout()调用不起作用?

时间:2009-04-16 03:11:56

标签: javascript ajax

任何人都知道下面代码出了什么问题?在Ajax完成后,系统只会调用getProgressMsg() :(

function ajax_action(action)
{
    setTimeout('getProgressMsg()',2000);

    xmlHttp=GetXmlHttpObject();

    if (xmlHttp==null)
    {
        alert ("Browser does not support HTTP Request")
        return
    }

    var url="admin.php"
    url=url+"?action=admin"
    url=url+"&sid="+Math.random()

    xmlHttp.onreadystatechange=stateChanged;

    xmlHttp.open("GET",url,true);
    xmlHttp.send(null);

}


function getProgressMsg()
{
    xmlHttp2=GetXmlHttpObject2();

    if (xmlHttp2==null)
    {
        alert ("Browser does not support HTTP Request")
        return
    }

    var url2="admin.php"
    url2=url2+"?action=getMsg"
    url2=url2+"&sid="+Math.random()

    xmlHttp2.onreadystatechange=stateChanged2;
    xmlHttp2.open("GET",url2,true);
    xmlHttp2.send(null);
}

1 个答案:

答案 0 :(得分:1)

一些想法......

  1. 你有两秒钟的超时时间。你肯定第一个AJAX请求花费的时间比这长吗?
  2. 所有JavaScript(包括事件处理程序)都是单线程的。如果您忙于stateChanged(),则在您返回之前不会调用getProgressMsg()
  3. 除了发出另一个AJAX请求之外,你在getProgressMsg()中什么也没做 - 你确定这不仅仅是由浏览器或网络服务器排队到没有完成处理的地方,直到第一个完成?
  4. 建议:

    • 尝试通过简单调用getProgressMsg()替换alert()中的代码。然后将延迟从2000减少到200,并查看它是否立即显示。
    • 确认您在stateChanged()
    • 中没有进行任何异常繁重的处理
    • 检查服务器端代码...在处理第二个处理第二个请求时,确认您没有保留资源。