0

我有这个 html 和 ajax 文件,但它并没有像我想要的那样每秒更新一次。我希望它每秒调用 getTime()。它只做一次,然后什么也不做。

有什么想法吗?谢谢。

<head>
    <title>Auction</title>
    <script type="text/javascript">
        function getTime() {
            if (str=="") {
                document.getElementById("txtHint").innerHTML="";
                return;
            } 

            if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp=new XMLHttpRequest();
            } else {// code for IE6, IE5
                xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
            }

            xmlhttp.onreadystatechange=function() {
                if (xmlhttp.readyState==4 && xmlhttp.status==200) {
                    document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
                }
            }

            xmlhttp.open("GET","functions.php?action=getCurrentTime&id=13",true);
            xmlhttp.send();

            setTimeout(getTime, 1000);
        }

        window.setInterval(getTime, 1000);
    </script>
</head>
<body>
    <?php beginGetAllInfo(); ?>
</body>

4

1 回答 1

1

根据您的示例代码,内部发生的第一件事getTime()是检查名为的变量str是否为空,如果是,则从函数返回。str未定义(在您的示例代码中),因此它应该返回。尝试删除该if语句,或初始化str为不会导致语句失败的内容。

此外,您有两个语句将(最终)导致您的代码每秒执行两次: setTimeout(getTime, 1000);window.setInterval(getTime, 1000);

第一个,setTimeout()将在 1 秒后执行一次代码。但是,每次执行该getTime()方法时都会执行此操作 - 因此理论上它应该每秒运行一次。第二个,setInterval()将以 1 秒的间隔执行代码。因此,您的代码将始终每 1 秒执行一次。

我建议要么删除setTimeout()内部的线getTime(),要么将 更改setInterval()为 a setTimeout()(可以这么说,让球滚动)。

于 2012-10-05T03:01:56.483 回答