Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/374.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
Php setInterval内的Javascript setTimeout_Php_Javascript_Jquery_Setinterval - Fatal编程技术网

Php setInterval内的Javascript setTimeout

Php setInterval内的Javascript setTimeout,php,javascript,jquery,setinterval,Php,Javascript,Jquery,Setinterval,我这里有个问题。。 我使用setInterval函数将页面加载到div中,每30秒加载一次。好。。在那一页中,我有另一个setInterval函数,它由一个每秒改变一个数字的倒计时组成。 问题是,一次倒计时超过3秒,即使它必须在一秒钟内回调。 就像:01:24->01:21->01->19 以下是我的第一次设置间隔的代码: <script> var t; t=setInterval(function(){ $.get('<?=return_url

我这里有个问题。。 我使用
setInterval
函数将页面加载到div中,每30秒加载一次。好。。在那一页中,我有另一个
setInterval
函数,它由一个每秒改变一个数字的倒计时组成。 问题是,一次倒计时超过3秒,即使它必须在一秒钟内回调。 就像:01:24->01:21->01->19

以下是我的第一次设置间隔的代码:

<script>
    var t;
    t=setInterval(function(){
        $.get('<?=return_url("php/home_new.php");?>', { k: "1" } ).done(function(data){
            if(data)$("#ex_start_test").html(data);});
        },
        30000
    );
</script>

变量t;
t=设置间隔(函数(){
$.get('',{k:'1}).done(函数(数据){
if(data)$(“#ex#u start_test”).html(data);});
},
30000
);
以及倒计时代码:

<?
$query=q_return("SELECT nume, cod, data, MINUTE(data_start) as minute, data_start FROM chestionare WHERE data_start>date_sub(now(), interval 2 minute)");?>

<script>
    var timp_c="<?=$query['minute'];?>";
    var sec;
    var min;
    $.get('<?=return_url("php/getimp.php");?>', { k: "sec" } ).done(function(data){sec=data;});
    $.get('<?=return_url("php/getimp.php");?>', { k: "min" } ).done(function(data){min=data;});

    setTimeout(refresh, 1000);

    function refresh(){
        if(sec>=1){
            sec=sec-1; 
        }else{
            min=min-1;
            sec=59;
        }

        if(sec<10){
            $("span#ex_start_timp_ramas_sec").each(function(){
                $(this).html("0"+sec);
            });
        }else{
            $("span#ex_start_timp_ramas_sec").each(function(){
                $(this).html(sec);
            });
        }
               $("span#ex_start_timp_ramas_min").each(function(){
            $(this).html(min);
        });

        if(sec==0 && min==0){
            //$("#ex_click_final").trigger('click');
            clearInterval(t);
            $("#ex_new_test").hide();
        }

        setTimeout(refresh, 1000);
    } 
</script>

var timp_c=“”;
var-sec;
var-min;
$.get(“”,{k:“sec”}).done(函数(数据){sec=data;});
$.get(“”,{k:min}).done(函数(数据){min=data;});
设置超时(刷新,1000);
函数刷新(){
如果(秒>=1){
秒=秒-1;
}否则{
min=min-1;
秒=59;
}

如果(sec我想你的问题是每次用
setInterval
重新加载页面时,你都会产生另一个
setTimeout
链,而没有清除前一个链

尝试保存您的
timeoutId
,并将其作为倒计时代码中的第一件事清除。类似的操作应该可以:

<?
$query=q_return("SELECT nume, cod, data, MINUTE(data_start) as minute, data_start FROM chestionare WHERE data_start>date_sub(now(), interval 2 minute)");?>

<script>
var timp_c="<?=$query['minute'];?>";
     var sec,
         min,
         timeoutId;
     $.get('<?=return_url("php/getimp.php");?>', { k: "sec" } ).done(function(data){sec=data;});
     $.get('<?=return_url("php/getimp.php");?>', { k: "min" } ).done(function(data){min=data;});

     if (timeoutId) {
         clearTimout(timeoutId);
     }

     timeoutId = setTimeout(refresh, 1000);

     function refresh(){
         if(sec>=1){
             sec=sec-1; 
         }else{
             min=min-1;
             sec=59;
         }

         if(sec<10){
             $("span#ex_start_timp_ramas_sec").each(function(){
                 $(this).html("0"+sec);
             });
         }else{
             $("span#ex_start_timp_ramas_sec").each(function(){
                 $(this).html(sec);
             });
         }

         $("span#ex_start_timp_ramas_min").each(function(){
             $(this).html(min);
         });

         if(sec==0 && min==0){
             //$("#ex_click_final").trigger('click');
             clearInterval(t);
             $("#ex_new_test").hide();
         }

         timeoutId = setTimeout(refresh, 1000);
    }
</script>

var timp_c=“”;
var sec,
闵,
超时ID;
$.get(“”,{k:“sec”}).done(函数(数据){sec=data;});
$.get(“”,{k:min}).done(函数(数据){min=data;});
if(超时ID){
clearTimout(timeoutId);
}
timeoutId=setTimeout(刷新,1000);
函数刷新(){
如果(秒>=1){
秒=秒-1;
}否则{
min=min-1;
秒=59;
}

如果(sec我认为这里的问题是您发出两个Ajax请求,然后您想要启动计时器,但是这些请求需要时间来执行,因为它们是异步的,这可以解释您看到的结果

$。当()
救援时:

var $getsec = $.get('<?=return_url("php/getimp.php");?>', { k: "sec" } ),
$getmin = $.get('<?=return_url("php/getimp.php");?>', { k: "min" } );

$.when($getsec, $getmin).done(function($sec, $min) {
    min = $min[0]; // [0] = data
    sec = $sec[0];
    // start refresh
    setTimeout(refresh, 1000);
});
var$getsec=$.get(“”,{k:“sec”}),
$getmin=$.get(''',{k:“min”});
$.when($getsec,$getmin).done(函数($sec,$min){
最小值=$min[0];//[0]=数据
秒=秒[0];
//开始刷新
设置超时(刷新,1000);
});

getimp.php返回的值,实际的最小秒数?将与仅一个$.get()调用更加一致