2012-04-03 44 views
0

长话短说,即时通讯试图建立一个聊天应用程序....以及它已经建成的类型,但是,一直试图实现AJAX到它。本质上是这样的,因为当用户发布消息时,消息通过数据库传递,它会自动反映在页面上,而不会刷新页面。Ajax/js刷新,限制内容显示/得到从php/sql

在JavaScript方面我能想到的唯一事件是没有用户输入的情况下运行的javascript setInterval()函数,我已经设置为每5秒钟重复一次。

在PHP端有消息(回显出),我有一个声明,只显示 最后10条消息。

问题是,它每5秒钟吐出相同的10条消息。一遍又一遍......破记录有点哈哈。反正等什么我不知道/无法弄清楚如何实现,是一种过滤器类型,或东西,上面写着“

哎只显示我的最后10条信息,并更新只有当 新的内容。

所以,我需要的是什么(我假设,因为它的一个刷新页面的JavaScript)是说,只有显示只有当它的新内容的最新的X帖子。我想也许是一个if/else比较一个值到另一个,然后如果false/true,运行刷新...但 我有什么比较?

正如你所看到的,我卡住了。

我不发表代码,因为它很多...不想在这里放两块代码,但基本上PHP从DB部分读取行,并通过回声从数据库张贴最新的10篇文章。

而且Js有AJAx命令可以获取这些消息并将它们发布到页面上。

而且,除了在ajax/js刷新上重新发布相同的10条消息之外,两者都可以工作。

任何提示,链接,逻辑...任何东西,以帮助我通过这个驼峰我很高兴和谦卑的欣赏。

P.S - 如果您需要查看代码。让我知道和生病张贴,但我认为它很清楚。

谢谢先进。

回答

1

保留最后返回时间戳在JavaScript,当你需要更新客户端,发送沿,并使用它作为你的SQL条件:

select * from chat_logs WHERE datetime > $postedValueFromClient # AND YOUR OTHER CONDITIONS 

给该查询结果返回给客户端,并更新最后的时间戳。

因为我没有任何代码,所以我无法进一步帮助您,但这是实现它的一种方式。

+0

谢谢你给了我一个主意。 – somdow 2012-04-03 11:48:20

1

我会一次取1行,记住收到的最后一行的编号,例如read也会在表格中创建一列,并将其设置为10,如果邮件被设置为1,并只查找已设置为0的消息。

MySQL的语句:

SELECT * FROM `table` WHERE `id` > `lastID` AND `read` = 0; 
2

所以网上聊天客户做这件事情,他们做一个请求到服务器,服务器让它挂起,仿佛它花费很长的时间来处理,而是,它等待看看是否有其他人发布了聊天或你有什么,一旦它发生,它会回复用户,如果达到超时最大值,它只是允许连接实际超时,此时javascript会使它再次触发。这消除了讨厌,每5秒的功能为首发打电话。

+0

是的,我正在考虑这个,但是..稍后会试图解决...你如何建议去做这件事?我的意思是,ID仍然必须打开服务器的请求权? – somdow 2012-04-03 11:08:16

+1

所以是的,你仍然必须打到服务器,但你有一个while循环或类似的服务器循环,同时检查新的消息,如果它没有找到任何超时,打破循环。无论如何这解决了每5秒一次的问题。 – Ryan 2012-04-04 08:40:10

+0

谢谢大声笑....逻辑很棒。那么会是一个好的coutner? like..to比较?我想问的原因是,我需要一些方法来知道什么时候一条消息是最后一条消息。那么我可以比较,或者打破循环或后...问题是我需要一个东西来比较和不知道它是什么。 – somdow 2012-04-04 10:24:11