我正在研究像Facebook这样的消息系统。我确实留下了一个对话列表,并在右侧的一个框中加载消息,就像Facebook一样。Ajax消息系统问题
基本系统是完整的(PHP/MySQL的),这里它是如何构建的一些信息:
messages.php - 主页,基于URL的参数。 Rewrited with.htaccess:
例子:
- URL = http://www.domain.com/messages/ - 右框:展出形式发送新邮件。
- URL = http://www.domain.com/messages/Username - Ajax呼叫
getUserMessages.php
加载登录用户和Username
之间的消息并在右侧框中显示它们。
- getUserMessages.php - 从在用户和用户选择的已记录之间数据库消息获取。它的输出HTML准备好显示。
现在系统是部分支持Ajax,我希望它是,就像Facebook的一样。
目前的Ajax化的部分是:
当用户vieweing的对话,它会自动显示新邮件,同时还更新了最后一条消息会话列表。
如果用户没有查看对话,它会收到新消息并更新对话列表。
这是用PUSH服务完成的,为用户提供实时体验。
我想改善这一点,并使其以这样的行动:
用户点击对话列表,并将其加载在右边框的消息,同时也改变了地址栏中的网址, withut重新加载整个页面。
我可以很容易做到,当用户点击对话加载邮件的一部分,但我开始之前,我有两个问题:
如何更改地址URL,同时显示用户会话WITHOUT重新加载页面?
我找到了答案。
2.我如何缓存对话?因此,如果两个会话之间的用户切换,它不会再次调用PHP文件,并在数据库中查询所有消息,但追加仅新邮件(通过另一个PHP文件可能获取唯一的未读邮件)
编辑
我COMED了一个解决方案:
当用户打开一个对话,我缓存整个Ajax响应(即HTML)的一个变量,如messages-n
,其中n
是的user_id
该选择对话,然后如果用户再次点击该对话,我检查是否设置了messages-n
,如果是,我打印它并运行ajax请求以仅获取未读消息并追加它们。 这只是在我的脑海里,我没有把它变成实际的代码。
可以正常工作吗?
也许你可以将消息保存在一个数组中。当用户切换到已经加载的对话时,这些消息直接显示给他。您可以使用消息的id(或其时间戳)来仅从数据库中获取未读消息。 – Christopher 2013-05-12 17:38:51
@Christopher我用类似的解决方案编辑了我的问题,查看它。 – Fr0z3n 2013-05-12 17:54:01
我认为这应该工作。只有一件事:我不会用html回答ajax调用。为什么不使用xml或json并在客户端创建html?这将使您能够针对不同的显示类型使用相同的脚本(例如对话预览或更大的屏幕等) – Christopher 2013-05-12 18:00:42