【发布时间】:2015-01-13 06:38:13
【问题描述】:
我有一个小型应用程序,用户可以在其中将任务拖放到 HTML 表中。
当用户放弃任务时,我调用了一个名为update_task的javascript函数:
function update_task(user_id, task_id, status_id, text, uiDraggable, el) {
$.get('task_update.php?user_id='+user_id+'&task_id='+task_id+'&status_id='+status_id+'', function(data) {
try {
jsonResult = JSON.parse(data);
} catch (e) {
alert(data);
return;
};
在 task_update.php 我得到我的价值观; user_id、task_id & status_id 并执行 PDO UPDATE 查询,以更新我的数据库。如果查询正确执行,我
echo json_encode ( array (
'success' => true
) );
然后我将任务附加到正确的表格单元格
if(typeof jsonResult.success != 'undefined') {
$(uiDraggable).detach().css({top: 0,left: 0}).appendTo(el);
}
这一切都很好。但是,我开始意识到,当 2 个或更多人同时进行更改时,这是一个问题。如果我正在使用 2 个浏览器进行测试,并且在这两个浏览器上都打开了站点,例如:然后,如果我在 browser1 上移动任务,我将不得不在 browser2 上手动刷新页面以查看更改。
所以我的问题是;如果对 DB 表进行了更改,我如何使我的应用程序自动解除技术?以及如何在不刷新页面的情况下更新 HTML 表格。
我查看了一些更新页面的时间间隔,但这对我不起作用,因为我真的不想强制浏览器刷新。例如,用户还可以在灯箱 iframe 中创建新任务,因此如果他们在尝试创建新任务时刷新浏览器,这对他们来说会非常烦人。
是的,对我来说最好的做法是什么?
【问题讨论】:
-
自动检测并在它发生后用它做什么?如果这是问题所在,您可能可以实现 MySQL 的 TRIGGER。
-
hmmm...使用ajax代替刷新页面并相应地修改任务?
-
据我所知,websockets 是在不响应请求的情况下将数据从服务器推送到客户端的唯一方法。也就是说,您可能会选择“间隔刷新”并使用 ajax 来完成......虽然这是一个非常昂贵的解决方案,因为这意味着很多无用的请求。
-
EventSource 可能是要走的路。 docs
-
您应该使用long polling 来检查您的应用程序中的实时更改。你可以看到here an implementation in php。
标签: javascript php pdo