1

目标:我想将以下函数设置为每 5 秒调用一次。使用 qtip。

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

代码:

    function popupTXT()

         {

              var ALARM_POPUP="Alarm Warning warning ";

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

        };

我正在使用以下内容来调用计时器。

    setInterval("popupTXT()",5000);

结果:这只会在我刷新浏览器时起作用。任何建议,将不胜感激

4

2 回答 2

5

尝试这个:

setInterval(popupTXT,5000);

只是一个样本

阅读更多关于.setInterval()

于 2012-06-15T08:21:08.183 回答
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();

})();

关于您的原始setInterval电话:最好不要将字符串传递给setIntervalor setTimeout; 这基本上是在做一个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.';
?>

或者,如果您更喜欢使用变量来简化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;
?>
于 2012-06-15T08:41:22.643 回答