如何在javascript中连续执行代码?

3
我是一名有用的助手,可以翻译文本。

我有一个HTML文件和一个PHP文件。index.php显示一个值,该值被传递到servo.php。servo.php将该值写入名为/dev/servoblaster的文件中。

目前,只有在我点击带有我的函数的按钮时才会显示该值。 我希望该值能够连续地显示和发送,而不是通过按按钮来实现。

您可以在这里找到这两个文件: servo.php index.html

该函数:(您也可以在HTML文件中找到它)

    function tilt() { var tilt = document.getElementById("tiltRange").value;
                      document.getElementById("tilt_Range").innerHTML = tilt;
                      var xhttp = new XMLHttpRequest();
                      xhttp.open("GET", "servo.php?dir=P1-11=" + tilt, true);
                      xhttp.send();
                    }

HTML文件的body标签:
    <button onclick="tilt()">Tilt</button>

    <input type="range" id="tiltRange" value="140" max="170" min="60">

    <text id="tilt_Range"></text>

2
使用 setInterval 函数。setInterval('tilt',5000); - Aju John
你想设置一个定时器并每 x 秒调用该函数吗? - Paul Fitzgerald
如果函数被正确执行,那么是的。 - 0fd69cd8ff23
1
我更喜欢在这种情况下使用WebSockets而不是超时。请看这个例子:http://socketo.me/docs/hello-world - CarlosCarucce
为什么不直接绑定输入元素的更改事件(最终在文档准备就绪时触发)?因为如果输入值没有更改,就没有理由向服务器发送无用的请求。 - A. Wolff
4个回答

10
你可以使用 setInterval 函数每隔 n 秒调用你的脚本:
setInterval(tilt, 5000); 

每隔5秒将调用tilt()...

编辑:

添加了clearInterval示例:

var doIt = setInterval(tilt, 5000);
你可以这样清除/停止它:
clearInterval(doIt) 
所以你应该为你的“停止”按钮分配一个点击处理程序,调用clearInterval。

1
5000毫秒是我为了举例而添加的任意数字(显然)-这取决于OP来确定此功能。个人建议检查请求是否完成,如果没有完成,则不要再次调用该函数,或者采取类似的措施,但正如我所说,这是OP的练习。 - Stuart
是的,那就是我的观点。比起使用间隔(interval),更好的方法是在 Ajax 完成时递归调用超时(timeout)。 - A. Wolff
确实 - 为什么不添加一个这样的答案呢?听起来对于楼主来说是一个理想的解决方案。 - Stuart
因为在我看来这只是一个 XY 问题,OP 应该只需将更改事件绑定到输入元素以向服务器发送请求。 - A. Wolff
@Stuart,我该如何停止 setInterval(tilt, 5000) 函数?我尝试了在 tilt() 函数中添加 if 循环(if (tiltstop == false) {...}),然后创建了一个重置按钮,将变量 tiltstop 设置为 true。但是它没有起作用。那么我该如何停止 setInterval() 函数呢? - 0fd69cd8ff23
setInterval分配给一个变量,然后可以使用clearInterval来停止它。我现在会在我的答案中添加一些代码给你。 - Stuart

4
您可以使用setInterval来按照一定时间间隔执行任何代码。
 setInterval(function () {
           document.getElementById("tiltRange").value;
                          document.getElementById("tilt_Range").innerHTML = tilt;
                          var xhttp = new XMLHttpRequest();
                          xhttp.open("GET", "servo.php?dir=P1-11=" + tilt, true);
                          xhttp.send();

        },30000);

0

在这个页面上,"Dhara Parmar"的答案对我有用。

我需要一个滚动事件触发器,例如当用户向下滚动到网页的某个位置时,会发生一个事件,例如弹出或警报消息。

以下是一个示例:

setInterval(function () 
    {
        if ($(window).scrollTop() > 1200) // at what scroll position 
            {
                alert("hello");
            }

    }, 10); // time repetition interval in milliseconds

0
你可以在这种情况下使用setInterval,使用以下语法:
var interval = setInterval(function () 
{
    var tilt = document.getElementById("tiltRange").value;
               document.getElementById("tilt_Range").innerHTML = tilt;
               var xhttp = new XMLHttpRequest();
               xhttp.open("GET", "servo.php?dir=P1-11=" + tilt, true);
               xhttp.send();
}, 5000);

而当你想要停止它执行那个动作时,只需执行以下操作:

clearInterval(interval);

希望有所帮助 :) 如果不是这样,请告诉我。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接