gpt4 book ai didi

ajax - ajax settimeout刷新div

转载 作者:行者123 更新时间:2023-12-03 16:56:13 27 4
gpt4 key购买 nike

我正在显示使用jQplot监视数据的图形。
为了刷新保存该图的div,我每5秒调用一次ajax调用(请参见下面的JavaScript摘录)。
在服务器上,PHP脚本从数据库中检索数据。
成功后,将在5秒钟后使用JavaScript setTimeout(ajax,5000)重新调用ajax调用。
发生错误时,在显示错误消息之前,使用setTimeout(ajax,5000)重试10次ajax调用。
监视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调用成功或失败之后重新调用ajax(),所以您要启动多个计时器。这就是您的浏览器崩溃的原因。

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

var t; //global

在每个回调函数中:
if(t)      
clearTimeout(t);
t = setTimeout(ajax, 5000);

有关计时器的更多信息,请点击此处: w3 school

关于ajax - ajax settimeout刷新div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7903423/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com