如何从setInterval()调用js函数

Rhy*_*hys 1 javascript jquery qtip

目的:我想将下面的函数设置为每5秒调用一次.使用qtip.

变量ALARM_POPUP通过一个替换变量内容的shellscript每分钟更改一次.

码:

    function popupTXT()

         {

              var ALARM_POPUP="Alarm Warning warning ";

              $('#telecom_1').qtip({content:ALARM_POPUP,style: {name: 'dark', tip: 'topLeft'} });

        };
Run Code Online (Sandbox Code Playgroud)

我正在使用下面的呼叫定时器.

    setInterval("popupTXT()",5000);
Run Code Online (Sandbox Code Playgroud)

结果:这只有在刷新浏览器时才有效.任何建议,将不胜感激

the*_*dox 5

试试这个:

setInterval(popupTXT,5000);
Run Code Online (Sandbox Code Playgroud)

只是一个样本

阅读更多关于.setInterval()的信息


T.J*_*der 5

变量ALARM_POPUP通过一个替换变量内容的shellscript每分钟更改一次.

这意味着,为了在页面上看到该更改,您必须调用服务器以获取更新的值.你不是那样做的.

你可以通过这样做ajax.创建一个服务器端页面,ALARM_POPUP以原始文本(使用Content-Type: text/plain)或JSON(使用Content-Type: application/json)的形式输出新值,并触发ajax调用以获取该页面的内容,然后qtip使用它进行更新.你不会想要setInterval那个,因为ajax呼叫所需的时间长度不确定,事情会很快变得混乱.相反,只需setTimeout在完成上一个周期后启动.

假设您创建了一个updatealarm.xyz页面(PHP,JSP,ASP.Net,等等),输出电流ALARM_POPUP值作为纯文本,将看的东西是这样的:

(function()
{
    var ALARM_POPUP="Alarm Warning warning ";

    function updateQtip(popupText)
    {
        $('#telecom_1').qtip({content:popupText,style: {name: 'dark', tip: 'topLeft'} });
        setTimeout(nextUpdate, 5000);
    }

    function nextUpdate()
    {
        $.ajax({
            url: "updatealarm.xyz",
            success: function(data)
            {
                ALARM_POPUP = data; // Although you don't actually need to update it
                updateQtip(data);
            },
            error: function()
            {
                // Do error handling
            }
        });
    }

    updateQtip();

})();
Run Code Online (Sandbox Code Playgroud)

关于你的原始setInterval电话:最好不要将字符串传入setIntervalsetTimeout; 这基本上是做的eval,既不必要也不好.而是传递一个函数引用(例如,函数的名称,而不是()调用它),如上所述.


你的评论如下:

我遇到了这个问题,我想知道你是否提供了php文件的样子

我只做了一点PHP,但我相信它看起来像这样:

<?php
    header('Content-Type: text/plain');
    echo 'This is the message that will end up in \'data\' in the ajax success handler.';
?>
Run Code Online (Sandbox Code Playgroud)

或者,如果您更喜欢使用变量来使sed脚本更容易:

<?php
    header('Content-Type: text/plain');
    $alarm_popup = 'This is the message that will end up in \'data\' in the ajax success handler.';
    echo $alarm_popup;
?>
Run Code Online (Sandbox Code Playgroud)

  • @Rhys:关键点是**客户端与服务器**页面的副本.当浏览器请求页面时,服务器会向其发送页面的*副本*.您的`sed`脚本会更改服务器***上的页面***,而不是客户端上的页面***.它不会(也不能)更改页面的客户端显示这就是您必须要求服务器进行更新的原因.显然你不想再向服务器询问整个页面,所以要做一个单独的页面.让`sed`脚本*也*更新`updatedalarm.xyz`并且上面应该解决问题,因为客户端代码从服务器请求更新的文件. (2认同)