ajax是异步的,而且是支持同时多个请求的,但是一次使用中,发现ajax会发生阻塞,当时我用ajax发送一个发邮件的请求,该请求会执行很长时间,所以我同时发送一个请求去查询已经发送了多少条。但是发现,查询的ajax请求,每次都要等发送的请求回来后,才会去执行,最后多此实验加百度发现了问题
如果多个ajax请求指向的同一个php文件中用到了session,而且没有释放锁,那么请求就会阻塞
因为php端执行session_start()的时候,会创建一个session文件并锁定他,当脚本执行完毕的时候,就会释放它,而这个时候其它的请求就会排队等待。
实验如下:
两个ajax请求,从上向下执行
服务器端:开启session;test1 等待10秒 test2等待 3秒
最后实际执行结果中,alert()先弹出“test111”,然后再弹出“test222”;,即必须等待第一个ajax执行完了才会执行第二个ajax
解决方法:
1.ajax指向的文件不用session,或者指向一个文件用session,另一个文件不用session(注意:就算指向两个文件,同域名下两个文件都用了session也是不行的,除非不同域名)
2.使用session_write_close();这个方法,等于解除了session锁。