窗口关闭后仍在等待ajax查询

ajax queries still waiting after window close

本文关键字:在等待 ajax 查询 窗口      更新时间:2023-09-26

我有一个网页,它有一个从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进程在等待创建同一个outfile。

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;
        }
    }
}