我正在使用jQplot显示图表来监控数据。 为了刷新持有图形的div,我每5秒调用一次ajax调用(参见下面的JavaScript摘录)。 在服务器上,PHP脚本从数据库中检索数据。 成功时,使用JavaScript setTimeout(ajax,5000)在5秒后重新调用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);
}
}
}
答案 0 :(得分:1)
由于您在ajax呼叫良好或失败后重新呼叫ajax(),因此您需要启动多个计时器。这就是您的浏览器崩溃的原因。
你可能想尝试清除当前的计时器,然后启动下一个计时器
var t; //global
在每个回调函数中:
if(t)
clearTimeout(t);
t = setTimeout(ajax, 5000);
有关计时器的更多信息:w3 school
答案 1 :(得分:0)
我按照建议删除了jqplot调用,问题就消失了。
显然jqplot是罪魁祸首,我发现很多条目都涉及jqPlot内存泄漏。
我使用jQuery 1.6.4并安装了jqPlot Charts版本1.0.0b2_r792,据说可以解决内存泄漏问题。
此外,我更换了
$('#chartdiv_bar').html('');
与
$('#chartdiv_bar').empty();
感谢您的支持。