Javascript 窗口关闭后仍在等待的ajax查询
我有一个网页,它有一个从php脚本获取数据的ajax调用Javascript 窗口关闭后仍在等待的ajax查询,javascript,php,ajax,apache,Javascript,Php,Ajax,Apache,我有一个网页,它有一个从php脚本获取数据的ajax调用 ajaxRequest = new XMLHttpRequest(); ajaxRequest.open("GET", "submit.php?id=" + id, true); ajaxRequest.send(null); 在submit.php中,我等待一个二进制文件完成并创建一个outfile while(1){ if(is_file($OUTFILEPATH)){ break; }else{
ajaxRequest = new XMLHttpRequest();
ajaxRequest.open("GET", "submit.php?id=" + id, true);
ajaxRequest.send(null);
在submit.php中,我等待一个二进制文件完成并创建一个outfile
while(1){
if(is_file($OUTFILEPATH)){
break;
}else{
sleep(60);
}
}
问题在于,如果用户关闭浏览器窗口,ajax调用和相应的httpd不会中止
如果用户多次刷新网页,我会有数百个httpd进程等待创建相同的输出文件
Apache Server Status
115 requests currently being processed, 5 idle workers
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW_W____........
................................................................
................................................................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
我相信答案是我需要将数据发送到关闭的客户端,这会导致php意识到连接已经关闭,然后您必须退出脚本
while(1){
if(is_file($OUTFILEPATH)){
break;
}else{
sleep(60);
print " ";
ob_flush();
flush();
if(connection_aborted() != 0{
exit;
}
}
}
睡眠是不可中断的,也就是说,它不受关闭连接的影响。由于睡眠是不可中断的,是否会发送一个kill信号,但被php忽略,然后当php脚本返回时,kill信号已经过去了?如果这种情况下,kill sig被发送但被忽略,那么exec'sleep60'会是一种解决方法吗?这样,如果php收到一个kill信号,它就可以杀死exec。我发现这在PHP5.1上不起作用,因为有一个连接被中止的bug。它在PHP5.3上运行良好+