Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 窗口关闭后仍在等待的ajax查询_Javascript_Php_Ajax_Apache - Fatal编程技术网

Javascript 窗口关闭后仍在等待的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{

我有一个网页,它有一个从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{
        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上运行良好+