【发布时间】:2015-01-08 16:30:12
【问题描述】:
首先,我完全意识到 web-sockets 和 comet 是比 AJAX 更好的方法,但我正在努力使我的代码尽可能简单,所以我现在使用 AJAX。
上下文
目前,用于获取特定对话消息的 PHP 代码(使用“cid”)嵌入在用户查看消息的页面中。因此,仅在每次刷新页面时才加载消息。因此,我决定创建一个基于 AJAX 的系统,它以设定的时间间隔(即 5 秒)为我获取消息。
问题
由于 AJAX 请求而执行的 SQL 代码显然只需要返回当前未显示在屏幕上的消息,否则整个对话将每 5 秒回显到屏幕上一次。因此,AJAX 需要有一种方法来确定消息是否已经在屏幕上,我认为这需要使用数据库字段来完成,但我不知道如何。
当前的数据库架构
(我会发布一张图片,但我的声誉太低了。)
Message_id(主键)、cid(消息也属于哪个会话)、message、send_user、receive_user、send_time。
我正在使用没有 jQuery 的 AJAX。
【问题讨论】:
-
如果 message_id 是自动增量的,那应该可以测试消息是否显示。只需跟踪客户端收到的最高 message_id 即可。 (这是假设您每 x 秒发送一次所有消息,而不是一次发送一条消息)
-
你为什么不用jQuery?
-
这将如何实现?你会设置一个会话变量来存储收到的最高 message_id 吗?
-
我已将该评论作为更详细的答案。
-
不,只需在每个请求中发送最新的消息 ID,并让响应包含比该消息更新的消息,以及在过去 10 秒内编辑的消息。然后,通过添加新消息并通过 id 修改现有消息来更新您的 ui。
标签: javascript php ajax