当jquery ajax中止时,中止php脚本执行

时间:2013-09-06 18:55:49

标签: php javascript jquery ajax apache

当jQuery $.postabort()中止时,我希望停止执行PHP脚本。基本上,每当用户更改任何输入字段时,$.post都应该点击test.php。如果在第一个请求返回之前更改了第二个输入,则$.post将被中止并发送一个新请求。我希望PHP在发生这种情况时停止执行。

根据PHP manual on connection handlnig

  

connection_status()仅在客户端正常断开连接(使用STOP按钮)时才返回ABORTED状态。在这种情况下,浏览器发送RST TCP数据包,通知PHP连接已关闭。

在使用RST TCP时,是否仍然要发送xhr.abort()

确保我已在test.php文件中对此进行了测试。理论上,如果脚本停止,文件应具有不同的大小和行数。但他们都是一样的。因此脚本不会中止。

jQuery主文件:

var xhr = false;
$('input').on('change', function(){
    if(xhr){
        xhr.abort();
    }

    xhr = $.post('/test.php', this.value, function(b64){
        xhr = false;
    });
});

PHP test.php

ignore_user_abort(false);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test1.log', "1\r\n",  FILE_APPEND);
sleep(1);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test2.log', "1\r\n",  FILE_APPEND);
sleep(1);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test3.log', "1\r\n",  FILE_APPEND);
sleep(1);
file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test4.log', "1\r\n",  FILE_APPEND);

1 个答案:

答案 0 :(得分:0)

这可能有所帮助:

  

注释

     

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

还有:http://www.php.net/manual/en/function.connection-aborted.php

也许一点点重写会有所帮助:

ignore_user_abort(false);
for($i = 0; $i < 4; $i++) {
  ob_flush();
  flush();
  if(connection_aborted()) {
    echo "\r\n\r\n";
    ob_flush();
    flush();
    exit;
  }
  file_put_contents($_SERVER['DOCUMENT_ROOT'].'/test/test' . ($i+1) . '.log', "1\r\n", FILE_APPEND);
  sleep(1);
}