【问题标题】:Javascript xmlhttprequest alwaysJavascript xmlhttprequest 总是
【发布时间】:2013-07-06 14:33:02
【问题描述】:

我正在尝试做一个聊天应用程序,所以我需要它来始终接收服务器信息。因此,当请求完成时,在:

http.onreadystatechange=function(){

我再次调用了该函数,所以:

request();

然后一切都在循环中发生。问题是它只在谷歌浏览器中工作。 explorer 和 firefox,不要等到get.onreadystatechange=function(),然后继续调用 return() 就像每秒 100 次一样,无缘无故 :(

function request()
{
    var get;
    if (window.XMLHttpRequest)
    {
        get = new XMLHttpRequest();
    }
    document.getElementById("request_status").innerHTML = "requests: "+requests;
    get.onreadystatechange=function()
    {
     if (get.readyState==4 && get.status==200)
       {
        requests+=1;
        request();
       }
    }
    get.open("GET","request.php",true);
    get.send();
}

在谷歌浏览器中,“请求”每秒增长 4 个。在 explorer 和 firefox 中,它们每秒增长 200 个,所以出了点问题!

【问题讨论】:

  • 查看开发人员工具中的“网络”选项卡。你得到缓存的结果了吗?
  • +1 用于缓存。我创建了一个 jsFiddle,jsfiddle.net/UkYBG/4 在 IE 中,如果有 302 个响应,requests 的增长速度非常快

标签: javascript http google-chrome firefox xmlhttprequest


【解决方案1】:

我无法检查资源管理器,但是当我在这个 Fiddle 中执行此操作时,Firefox 适用于您的示例:http://jsfiddle.net/ZHdgb/1/

虽然它似乎对我有用,但也许尝试发出这些同步请求,以便一次只触发一个。见下文:

改变

get.open("GET","request.php",true);

收件人:

get.open("GET","request.php",false);

【讨论】:

    【解决方案2】:

    在您的函数结束时,您将希望使用setTimeout(functionHere(), timeInMilisHere) 在指定时间(毫秒)后连续调用您的函数

    【讨论】:

    • 但是如果我在它结束的时候调用它,我不需要时间,函数会以最大可能的速度被调用
    • 你不需要时间是什么意思?比如时间对被调用的函数没有任何影响?
    • 我不需要使用延迟来间隔调用函数,因为我已经在它完成时调用了它。所以它会尽可能快
    • 而不是 request(); 使用 setTimeout(request(), 1000); 如果你想要更多,而不是改变时间,这将使呼叫间隔 1 秒
    • 但是我会收到很多未完成的请求。我最好只在最后一个请求完成后才请求新请求,不是吗?
    猜你喜欢
    • 2016-01-16
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多