如何从setInterval()调用js函数

时间:2012-06-15 08:19:22

标签: javascript jquery qtip

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

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

CODE:

    function popupTXT()

         {

              var ALARM_POPUP="Alarm Warning warning ";

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

        };

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

    setInterval("popupTXT()",5000);

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

2 个答案:

答案 0 :(得分:5)

试试这个:

setInterval(popupTXT,5000);

<强> Just a sample

详细了解 .setInterval()

答案 1 :(得分: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电话:最好不要将字符串传递到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.';
?>

或者,如果您更喜欢使用变量来简化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;
?>