【发布时间】:2013-09-10 23:03:55
【问题描述】:
当 jQuery $.post 被 abort() 中止时,我希望停止执行 PHP 脚本。基本上,每当用户更改任何输入字段时,$.post 应该点击test.php。如果在第一个请求返回之前更改了第二个输入,$.post 将被中止并发送一个新的。我希望 PHP 在发生这种情况时停止执行。
根据PHP manual on connection handlnig:
connection_status() 仅当客户端正常断开连接(使用 STOP 按钮)时才返回 ABORTED 状态。在这种情况下,浏览器会发送 RST TCP 数据包通知 PHP 连接已关闭。
在使用xhr.abort() 时,无论如何要发送RST TCP 吗?
为了确保我已经在 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 测试.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);
【问题讨论】:
-
你解决了吗?
-
@poletaew According to the php docs “但是,默认行为是当远程客户端断开连接时,您的脚本会中止。”虽然我很难验证这是实践。
-
这是一个谎言......要么 jquery 没有向服务器发出用户中止的信号,要么 php 完全忽略了它。
标签: php javascript jquery ajax apache