PHP在中止AJAX连接后执行代码

时间:2012-09-17 12:43:59

标签: php ajax connection

我目前正在使用锁定/解锁功能来编辑使用webfrontend的文章。 作为一种可靠的技术,可以在编辑,关闭浏览器或离开页面后解锁文章,我开发了以下概念:

  1. 访问编辑页面时锁定文章
  2. 立即向解锁操作发送没有超时的AJAX请求
  3. 解锁操作具有以下代码。在ajax请求被取消之前,它应该什么都不做。

    ignore_user_abort(true);
    set_time_limit(0);
    
    while (!connection_aborted()) {
    
        usleep(100000);
    }
    
    // do database operations to unlock the article
    

    但在ajax请求被ie取消之后。离开页面,它永远不会离开while循环。我也尝试过测试中止连接:

    while (connection_status() === CONNECTION_NORMAL)
    

    但结果相同,它永远不会离开循环。

1 个答案:

答案 0 :(得分:0)

引自PHP手册

  
    

在尝试向客户端发送信息之前,PHP不会检测到用户已中止连接。简单地使用echo语句并不能保证发送信息,请参阅flush()。

  

因此,在您的while循环中,您应该将虚拟数据发送到客户端:

ignore_user_abort(true);
set_time_limit(0);

while (!connection_aborted()) {
    echo "null"; @flush(); @ob_flush();
    usleep(100000);
}

// do database operations to unlock the article