该变量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
电话:最好不要将字符串传递给setInterval
or 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;
?>