2010-12-16 259 views
1

我正在编写一个小型的基于Web的即时消息客户端,它运行良好,但是我遇到了一些问题。原型JavaScript Ajax FIFO队列

该系统使用PHP和JavaScript编写,它使用每个页面上放置的身份验证ID,当发出ajax请求时,它必须包含此身份验证ID。这不是一个完美的系统,但我无法改变它。

的IM系统使用周期性执行人(Prototype库),有2个周期调用它使:

  1. 更新联系人列表,因为这并不经常更改它就会每隔30秒更新一次
  2. 检查新消息,现在这种情况会持续5秒。

的问题是:

定期执行进行呼叫更新联系人列表,使用认证ID,在PHP侧拿起该请求,检查认证ID,执行任务,返回新的列表JSON格式以及用于后续请求的新身份验证ID。

如果在第一个函数返回之前检查新消息(定时)或发送消息(未定时),则认证ID尚未更新。因此它使用与先前请求相同的认证ID。该身份验证ID被系统的PHP端拒绝。

我正在寻找一种将请求序列化为FIFO样式队列的方法,这意味着可以将所有发出的ajax请求(检查消息,检查联系人,发送消息)推送到队列中,并尽快执行先前的ajax调用已完成(100%完成并返回)

回答

1

创建请求队列类并使用它来处理您的ajax请求可能是个好主意。我敢肯定,你可以通过google搜索找到已经取得的东西,但这里有一个我发现,应该为你工作:

http://positionabsolute.net/blog/2007/04/ajax-request-queue.php

你将不得不更换所有的Ajax调用使用该新功能,但修改类像这样应该可以解决你的问题。