我使用jQuery ajax进行了一个长轮询,就像函数中的请求一样,它将一直运行。还有另一个向PHP后端文件发送数据的请求,第二个请求不是长轮询,它只是向该PHP文件发送数据。
问题:我用Firebug检查了当长轮询请求正在运行时,只要长轮询正在运行,我就不能发送另一个请求。即使长轮询正在运行,我如何发送另一个请求?
注意:我在这两个地方都使用了async: true
。
另一个问题:我如何确保即使是持有长轮询请求代码的函数也会被多次调用,但长轮询请求将只被调用一次?
发布于 2012-01-10 15:17:10
你的php使用基于会话的身份验证吗?您的问题可能是会话锁定。在每个请求的顶部无条件地使用session_start()的PHP中可能会发生这种情况,有时这是MVC框架中的默认行为,即使会话从未被修改过。其他可疑的用例是两个脚本都依赖于以管理员用户身份登录。
如果您怀疑可能是这种情况,那么在您不再需要修改两个脚本的会话数据之后,尝试在尽可能早的时候战略性地放置session_write_close()。
发布于 2012-01-10 14:28:58
您需要使用async : true
(这是默认设置)。
如果你说async : false
,这意味着它做一个同步请求,也就是说,它等待第一个请求完成,然后再做任何其他事情。您需要一个异步请求,以便浏览器可以在等待第一个请求的响应时继续执行其他操作。
(很少需要async : false
,如果您不确定是否需要它,那么几乎可以肯定您不需要。)
发布于 2018-08-31 07:18:56
使用Ajax、Jquery实现多个请求。
默认情况下,Jquery已经发出异步请求;但是,除非您使用async: false选项,否则Javascript代码中不会出现‘队列’问题;这显然会阻塞浏览器,直到请求终止。此外,出现此问题的原因如下:
1-使用PHP5.5的内置服务器-使用PHP5.5的这个特性,在同一台机器上,即在同一台计算机上,一个接一个地响应请求。但是,我建议您使用最新版本的XAMP服务器测试脚本;
2-使用会话-对于每个会话,对请求的响应都是以队列形式呈现的,而不是并行的,但是,建议使用session_write_close;
3- Apache中指令的MaxClients选项的意外配置-以防第一个和/或第二个选项没有出现;第三个肯定是问题所在。要解决此问题,只需访问httpd-npm文件并为多个请求配置MaxClients (256)选项。在当前版本的Apche中,如果我没有记错的话,MaxConnectionsPerChild.已经取代了MaxClients选项
因此,所显示的选项还取决于所显示的上下文。希望这能有所帮助。
https://stackoverflow.com/questions/8799355
复制相似问题