【发布时间】:2010-05-11 18:23:35
【问题描述】:
我的数据库中有一个将随机更新的列。每当更新该列时,我都需要刷新页面上的内容。如何使用 AJAX + jQuery 仅对数据库更改执行操作?
【问题讨论】:
我的数据库中有一个将随机更新的列。每当更新该列时,我都需要刷新页面上的内容。如何使用 AJAX + jQuery 仅对数据库更改执行操作?
【问题讨论】:
您所描述的是通俗地称为Comet 编程。 Comet 描述了一组通过持久 HTTP 连接将内容推送到网页的技术。
将使用数据库服务器中的触发器/存储过程组合来启动推送。这样,无论数据更新来自何处,都会发生这种情况。
【讨论】:
使用javascript的setinterval函数进行轮询并检查更新的dababase字段的值
查看以下链接了解更多详情http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/
【讨论】:
服务器(数据库/网络)无法发起连接——只有客户端可以。因此,您必须轮询数据库,直到有更新。您可以创建一个检查数据库和 jQuery 使用的 Web 服务。
编辑:我的立场是正确的。在服务器向其“推送”数据之前,可以保持 AJAX 连接打开。见:http://en.wikipedia.org/wiki/Reverse_Ajax
显然它确实在轮询:http://en.wikipedia.org/wiki/Push_technology#Long_polling。如果服务器还没有任何数据要发送,它会保持连接打开直到它发送。它不是“纯”推送技术,因为客户端没有服务器连接的监听端口。然而,效果是相似的。
编辑 2: 回到回答您的问题...您必须选择如何“轮询”网络服务。然后,Web 服务必须检查数据库以查看是否有更新。检查数据库的更新可能是最棘手的,实际上取决于您的要求。您可以运行 SQL 查询以查看是否有任何更改,但您怎么知道?您需要某种参数(通常是日期)来进行比较。如果做错了,您可能会错过一些更新或一次更新有多次点击。 Autocracy 所说的将是获得更新通知的好方法。您可以将该列表保存在数据库、内存等中,并在客户端获取更新时将其清除。
【讨论】:
我在聊天中做几乎相同的事情,每 xx 秒重新加载一个 php 脚本。
看起来像这样: 如果不使用 jquery.noconflict 将 j 替换为 $..
j(".chatref").everyTime(3000,function(i){
j.ajax({
url: "chatx.php",
cache: false,
success: function(updated){
j(".chatref").html(updated);
...do stuff..
}
});
我认为这是一个非常好的方法 :) 如果您想将 vars 发送到 chatx.php,只需添加 ?php &x=1&y=2?>
【讨论】:
将一个特殊的存储过程挂钩到您的数据库中,该过程会在修改后提醒您的应用程序。您需要一个自定义模块和正确的触发器语句。
您的另一个选择是轮询。
【讨论】:
您将不得不不断地轮询具有数据库值的页面。
【讨论】:
我建议创建一个 HTML 页面,该页面使用 setIntreval() 重复对查询数据库的 PHP 脚本进行 AJAX 调用。您可以使用 JSON 和 PEAR 来简化任务。
参考链接:
【讨论】:
您基本上必须不断地轮询服务器以了解对数据库的更改。服务器无法调用客户端,因此客户端只需要不断询问服务器是否有更改。