Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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/1/php/250.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
为什么setInterval不能在JavaScript中正确增加我的时钟?_Javascript_Php_Jquery_Momentjs - Fatal编程技术网

为什么setInterval不能在JavaScript中正确增加我的时钟?

为什么setInterval不能在JavaScript中正确增加我的时钟?,javascript,php,jquery,momentjs,Javascript,Php,Jquery,Momentjs,我想显示纽约的实际时间。我有一个html分区: <div id="time"></div> 它背后的想法是,我想从服务器获取数据,显示在我的网页上,然后每秒递增一次,持续五秒钟,然后再次从服务器获取时间(以保持与服务器上的时间一致)。稍后-继续这样做,获取时间,增加5秒,再次获取时间,等等 它是有效的。。。几乎当网页打开一段时间后,我可以看到实际时间,但它“闪烁”,我可以看到它显示不同的时间-这很难解释,但看起来在该div中已经有一段时间了,新的时间试图每秒钟覆盖一次。

我想显示纽约的实际时间。我有一个html分区:

<div id="time"></div>
它背后的想法是,我想从服务器获取数据,显示在我的网页上,然后每秒递增一次,持续五秒钟,然后再次从服务器获取时间(以保持与服务器上的时间一致)。稍后-继续这样做,获取时间,增加5秒,再次获取时间,等等

它是有效的。。。几乎当网页打开一段时间后,我可以看到实际时间,但它“闪烁”,我可以看到它显示不同的时间-这很难解释,但看起来在该div中已经有一段时间了,新的时间试图每秒钟覆盖一次。似乎上一次(此分区的内容)未删除。。。我不知道如何通过调用远程服务器从php获取时间来创建JSFIDLE,因此我只在上面粘贴了以下信息:(
这里可能有什么问题?

由于javascript是单线程的,因此setInterval可能在延迟后无法实际运行函数。它会将函数添加到堆栈中,以便在处理器准备就绪后立即运行。如果处理器堆栈中有其他事件,则运行所需的时间将超过间隔时间。多个间隔或tIMEOUT都在向同一堆栈添加调用以进行处理。要解决此问题,您可以使用HTML5 web workers或尝试递归使用setTimeout


这是一本关于网络工作者的好读物:

为什么不使用ajax每秒查询服务器以获取时间。这对服务器来说应该很难,因为它只能获取时间。我认为你让思考更难。这听起来是一个好建议,但我不知道如何遵循。你能给我一些例子吗?
<?php
  date_default_timezone_set('UTC'); 
  echo time();
?>
var serverTime;
        moment.tz.add('America/New_York|EST EDT|50 40|0101|1Lz50 1zb0 Op0');
        function fetchTimeFromServer() {    
             $.ajax({
        type: 'GET', 
        url: 'generalTime.php',
        complete: function(resp){
            serverTime = resp.responseText;

            function updateTimeBasedOnServer(timestamp) { // Take in input the timestamp
                var calculatedTime = moment(timestamp).tz("America/New_York");
                var dateString = calculatedTime.format('h:mm:ss A');
                $('#time').html(dateString + ", ");
            };

            var timestamp = serverTime*1000;
            updateTimeBasedOnServer(timestamp);
            setInterval(function () {
                timestamp += 1000; // Increment the timestamp at every call.
                updateTimeBasedOnServer(timestamp);
            }, 1000);

        }
        })
        };

        fetchTimeFromServer();

        setInterval(function(){
            fetchTimeFromServer();

        }, 5000);