2012-01-10 106 views
2

我已经在一个使用kQuery ajax的函数中做了一个长查询请求,它将一直运行。还有另一个要求发送数据到php后端文件的请求,这第二个请求不是长查询,它只是发送数据到该php文件。jquery ajax多个请求

问题:我用Firebug检查过,当长轮询请求运行时,只要长轮询正在运行,我就无法发送另一个请求。即使长轮询正在运行,我如何发送另一个请求?

注:我在两个中都使用了async:true

另一个问题:如何确保即使持有长轮询请求代码的函数将被调用多次,但长轮询请求将只发,只有一个

回答

5

是否根据你的php使用会话认证?你的问题可能是会话锁定。这可以发生在PHP中,它无条件地在每个请求的顶部使用session_start(),并且有时甚至在MVC框架中默认行为,即使会话永远不会被修改。其他可疑用例是,如果两个脚本都依赖以管理员用户身份登录。

如果您怀疑可能出现这种情况,请在您不再需要修改两个脚本的会话数据后尽早尝试session_write_close()的策略性位置。

+0

是的PHP脚本正在使用会话,但有必要使用它,因为它的聊天应用程序。 – 2012-01-10 07:22:00

+0

你的回答很有用 – 2012-01-10 18:58:02

+0

如何在使用'session_write_close()'之后对会话变量进行更改? – 2012-01-11 08:47:10

0

您需要使用async : true (这是默认值)。

如果说async : false这意味着它做了同步要求,即,等待第一个请求做任何其他之前完成。您需要一个异步请求,以便浏览器在等待第一个请求的响应时可以继续执行其他操作。

(很少有需要async : false,如果你不知道你是否需要它,你几乎肯定不会。)

+0

不好意思,我错了或有人编辑的问题,我使用异步:在这两个函数中都是true – 2012-01-10 06:46:02

+0

编辑问题 – 2012-01-10 06:46:22

+0

好吧,那让我的回答有些过时。如果你已经使用了'async:true',那么它应该可以工作 - 我肯定会在之前运行多个并发的ajax请求(并且响应以不同的顺序返回,即首先处理速度最快)。 – nnnnnn 2012-01-10 07:08:50