当jQuery $.post
被abort()
中止时,我希望停止执行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);
答案 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);
}