jQuery消息指示记录已更改

时间:2009-09-07 04:46:11

标签: jquery

无论如何,jQuery会向用户弹出一条消息,告知他们所在的数据库记录是否已更改,是否需要刷新以获取更改?

所以基本上,如果他们正在查看记录,请离开然后回来,向用户显示您当前正在查看的记录已更改的消息 - 请刷新。

感谢。

2 个答案:

答案 0 :(得分:3)

当然,这个网站就是这样做的。

大致如何运作:

  1. 使用setInterval$.ajax(),客户端会在X秒内轮询后端脚本。
  2. 后端脚本检查数据库并返回某种数据 - 在这种情况下,JSON可能更可取 - 表示是否
  3. 在客户端,JavaScript解析来自服务器的响应并采取相应的行动。
  4. 一些警告:

    • 如果有任何类型的流量,这有能力使服务器瘫痪。在确定投票频率时要特别小心。
    • 我建议限制脚本能够轮询服务器的每页加载的总次数(例如,在20次之后,脚本停止轮询)。这样,当用户将页面加载到浏览器中并离开时,您就不会浪费周期,例如。

    或者,您可以查看Comet,这在技术上更加困难,需要大量的服务器设置/系统管理员类型知识才能正常工作。

答案 1 :(得分:0)

是的,这是可能的,但你需要很多部分:

首先,一些服务器端代码可以检查记录是否已更新。如果没有关于您正在工作的环境的更多信息,我真的无法向您提供有关此步骤的任何信息。

其次,您需要使用jQuery's ajax features每隔一段时间从页面发送一个ajax请求。在该ajax请求的回调函数中,您可以检查ajax响应是否表示记录已更新。

第三,您只需要决定如何让用户知道记录已更改。你可以简单地在页面的某个地方插入一些文字,或者你可以想象并创建某种对话来让他们知道。或者,如果您愿意,您甚至可以为它们刷新页面,而不是告诉它们已经更新了。

这样的事情:

function checkForUpdates() {
    $.getJSON('/theUrlForUpdateChecker', { record_id: 23 }, function(json) {
        if (json.isRecordUpdated) {
            var message = 'The record has been updated, please refresh the page';
            $('#notificationArea').text(message);
        }
    });
}

//execute it every 60 seconds (60000 milliseconds):
setInterval(checkForUpdates, 60000);

为了简单起见,我使用了setInterval,但为了节省资源的利益,你可能想要反复使用setTimeout,并在知道记录更新后停止检查更新。