Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript setTimeout显示重新加载div之前的剩余时间-AJAX_Javascript_Ajax_Settimeout - Fatal编程技术网

Javascript setTimeout显示重新加载div之前的剩余时间-AJAX

Javascript setTimeout显示重新加载div之前的剩余时间-AJAX,javascript,ajax,settimeout,Javascript,Ajax,Settimeout,我正在编写一个脚本,以便在AJAX脚本加载失败后7秒钟内重试它。 有没有办法在setTimeout中显示timeleft 这是我的基本脚本: function update() { $.ajax({ type: 'GET', url: 'messageContent.php', timeout: 1000, success: function (data) { $("#chatBox").html(d

我正在编写一个脚本,以便在AJAX脚本加载失败后7秒钟内重试它。 有没有办法在setTimeout中显示timeleft

这是我的基本脚本:

function update() {
    $.ajax({
        type: 'GET',
        url: 'messageContent.php',
        timeout: 1000,
        success: function (data) {
            $("#chatBox").html(data);
            document.getElementById('messages').scrollTop = document.getElementById('messages').scrollHeight;
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            var d = document.getElementById("loadcon");
            d.innerHTML = '<div class="loadingAnimation"><h3 class="status">Reconnecting...</h3></div>';
            setTimeout (update, 7000);
        }
   });
}
函数更新(){
$.ajax({
键入:“GET”,
url:'messageContent.php',
超时:1000,
成功:功能(数据){
$(“#聊天室”).html(数据);
document.getElementById('messages').scrollTop=document.getElementById('messages').scrollHeight;
},
错误:函数(XMLHttpRequest、textStatus、errorshown){
var d=document.getElementById(“loadcon”);
d、 innerHTML='重新连接…';
setTimeout(更新,7000);
}
});
}

尝试使用函数执行计时器并在处理程序上调用它

像这样:

 function startCounter(timeLeft) {
      if (timeLeft > 0) {

        ..display timeLeft

       setTimeout (function() {startCounter(timeLeft-1); }, 1000);
       }
      else{

        ..your function to retry

       }
     }

希望有帮助:)

它可能足够精确,可以使用setInteval并让它运行7次迭代,或者直到时间过期(保存一个日期对象,并与当前时间vs 7000进行比较)。您必须以更短的时间间隔运行另一个计时器,以便能够进行某种倒计时。您可以在启动第一个计时器时节省时间,在第二个计时器上,只需计算剩余时间并显示它。或者,您可以在更短的时间间隔内使用一个重复计时器,并在触发更新之前计算它触发的次数(例如,每秒钟更新一次倒计时,在7次更新之后,然后调用您的更新)。它可以工作,谢谢。。但我遇到了另一个问题:(如果在完成最后一个计数器之前再次触发update(),计数器会发疯。仍在理解这个新问题吗