【问题标题】:ajax settimeout to refresh divajax settimeout刷新div
【发布时间】:2011-10-26 13:38:02
【问题描述】:

我正在使用 jQplot 显示一个图表来监控数据。 为了刷新保存图表的 div,我每 5 秒调用一次 ajax 调用(请参阅下面的 JavaScript 摘录)。 在服务器上,PHP 脚本从数据库中检索数据。 成功后,在 5 秒后使用 JavaScript setTimeout(ajax,5000) 重新调用 ajax 调用。 出错时,将使用 setTimeout(ajax,5000) 重试 ajax 调用 10 次,然后再显示错误消息。 监控 XHR 得知浏览器在大约 200 次请求后崩溃。 作为临时补救措施,在 50 次迭代后发出 location.reload() 以防止浏览器崩溃。 这可行,但不是理想的情况。 非常感谢任何对此问题的更好解决方案。

谢谢你,JZB

function ajax() {
  $.ajax({
    cache: false,
    url: 'monitor.php',
    data : { x: id },
    method: 'GET',
    dataType: 'json',
    success: onDataReceived,
    error: onDataError
  });

  function onDataReceived(series) {
    $('#chartdiv_bar').html('');
    $.jqplot('chartdiv_bar', [series['initHits']], CreateOptions(series,'Inits'));

    errorcount = 0;
    setTimeout(ajax, 5000);
  }

  function onDataError(jqXHR, textStatus, errorThrown) {
    errorcount++;
    if (errorcount == 10) {
      alert("No server response:\n\n" + textStatus + "\n" + errorThrown);
    } else {
      setTimeout(ajax, 5000);
    }
  }
}

【问题讨论】:

    标签: ajax browser crash settimeout


    【解决方案1】:

    由于您在一次成功或失败的 ajax 调用之后重新调用 ajax(),因此您正在启动多个计时器。这就是您的浏览器崩溃的原因。

    您可能想尝试清除当前计时器,然后启动下一个计时器

    var t; //global
    

    在您的每个回调函数中:

    if(t)      
     clearTimeout(t);
    t = setTimeout(ajax, 5000);
    

    这里有更多关于计时器的信息:w3 school

    【讨论】:

    • 感谢您的提示。按照建议使用 clearTimeout 并不能解决问题。监控 XHR 仍会显示请求不断增加,直到浏览器在大约 200 个请求时崩溃。我相信这些是 ajax 请求而不是计时器请求,除了重新加载页面来清除它们之外,我想不出任何其他方法。同样,非常感谢您提出解决方案的建议。
    • 抱歉,这不起作用。您是否尝试过从代码中删除 jqplot 调用。也许在那里使用警告声明。只是为了排除 jqplot 的问题。
    【解决方案2】:

    我按照建议删除了 jqplot 调用,问题就消失了。

    显然,jqplot 是罪魁祸首,我发现许多条目提到 jqPlot 内存泄漏。
    我使用 jQuery 1.6.4 并安装了 jqPlot Charts 版本 1.0.0b2_r792,据说可以解决内存泄漏问题。

    另外,我换了

    $('#chartdiv_bar').html('');
    

    $('#chartdiv_bar').empty();
    

    感谢您的支持。

    【讨论】:

      猜你喜欢
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2016-10-26
      • 2013-09-01
      相关资源
      最近更新 更多