jquery ajax多个请求

问题描述 投票:2回答:3

我在使用jQuery ajax的函数中做了一个像轮询一样的长轮询,它将一直运行。还有另一个请求将数据发送到PHP后端文件,而第二个请求不是长轮询,它只是将数据发送到该PHP文件。

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

注意:我在两者中都使用过async: true

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

php ajax jquery long-polling
3个回答
5
投票

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

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


0
投票

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

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

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


0
投票

Multiple requests with Ajax, Jquery.

默认情况下,Jquery已经发出异步请求;但是,除非您使用async:false选项,否则Javascript代码中不会发生'排队'问题;这显然会阻止浏览器,直到请求被终止。此外,出现此问题的原因如下:

1 - 使用PHP的内置服务器 - 使用PHP 5.5的这一功能,可以在同一台计算机上,即在同一台计算机上一个接一个地响应请求。但是,我建议您使用最新版本的XAMP服务器测试脚本;

2 - 会话的使用 - 对于每个会话,对请求的响应以队列形式呈现,而不是并行呈现,但是,建议使用session_write_close;

3 - Apache中指令的MaxClients选项的意外配置 - 如果没有出现第一个和/或第二个选项;第三个肯定是问题所在。要解决此问题,只需访问httpd-npm文件并为多个请求配置MaxClients(256)选项。在当前版本的Apche中,如果我没有弄错,MaxClients选项已被MaxConnectionsPerChild取代。

因此,所提出的选项也取决于所提出的背景。希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.