【问题标题】:Ajax Infinite LoopAjax 无限循环
【发布时间】:2012-09-26 03:46:31
【问题描述】:

我有一些 AJAX 代码,我希望每 1 秒继续运行一次。我将此添加到我的 HTML 页面中,以查看它是否会自行更新,但我必须刷新才能看到更改。

        while (1) {
            getTime();
        }

这无法继续更新,它从未更新我的文本。让 Ajax 一遍又一遍地做某事的方法是什么?

这里是getTime():

        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","auction.php?getTime=1",true);
            xmlhttp.send();

            setTimeout(getTime, 1000);
        }

谢谢!

【问题讨论】:

  • 能否提供getTime的出处?

标签: javascript html ajax


【解决方案1】:

重复性任务通常使用 setInterval 在 javascript 中完成:

window.setInterval 重复调用函数或执行代码 sn-p,每次调用该函数之间有固定的时间延迟。

在你的例子中,那将是

setInterval(getTime, 1000);

【讨论】:

  • 它本身没有更新,我仍然需要刷新。
【解决方案2】:

setInterval() 可能是您最好的选择 - 或者,setTimeout 在 AJAX 成功时反复重置自己。

【讨论】:

    【解决方案3】:

    您的代码是一个无限循环,并且很快就会进入浏览器可以处理的来自 js 的打开连接的限制数量。

    使用window.setInterval 做这样的事情。

    window.setInterval(getTime, 1000);
    

    【讨论】:

    • 它本身没有更新,我仍然需要刷新。
    • @Alec 是的,不应该在你的 ajax 回调函数中做刷新工作吗?
    • 我是 AJAX 新手,你能解释一下你在说什么吗?
    • @Alec 你的函数已经做了setTimeout(getTime, 1000);,所以去掉while循环,只有getTime();就可以了。
    【解决方案4】:
    function getTime(){
         setTimeout(getTime, [interval]);
    }
    

    应该这样做。

    【讨论】:

    • 不应该是window.setTimeout()吗?
    • 即使没有window Samples也可以使用
    • 我刚刚添加了我的 getTime() 方法。我把这个放进去,它自己没有做。
    • 你能评论一下if (str=="") { document.getElementById("txtHint").innerHTML=""; return; }吗?只是为了测试。然后再试一次。
    • 我只是这样做了,但它显示文本一秒钟或更短时间,然后所有文本都消失了。
    【解决方案5】:
    setInterval(getTime, 1000); // Run getTime() every second
    setInterval(getTime, 200);  // Run getTime() every 200 milliseconds
    

    【讨论】:

    • 它本身没有更新,我仍然需要刷新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-25
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    相关资源
    最近更新 更多