jquery ajax中止时中止php脚本执行
当jQueryjquery ajax中止时中止php脚本执行,php,javascript,jquery,ajax,apache,Php,Javascript,Jquery,Ajax,Apache,当jQuery$.post被abort()中止时,我希望停止PHP脚本的执行。基本上,每当用户更改任何输入字段时,$.post应该点击test.php。如果在第一个请求返回之前更改了第二个输入,则会中止$.post,并发送一个新的输入。我希望PHP在发生这种情况时停止执行 根据: 仅当客户端正常断开连接(使用停止按钮)时,connection_status()才会返回中止状态。在这种情况下,浏览器发送RST TCP数据包,通知PHP连接已关闭 使用xhr.abort()时,是否仍要发送RST T
$.post被abort()
中止时,我希望停止PHP脚本的执行。基本上,每当用户更改任何输入字段时,$.post
应该点击test.php
。如果在第一个请求返回之前更改了第二个输入,则会中止$.post
,并发送一个新的输入。我希望PHP在发生这种情况时停止执行
根据:
仅当客户端正常断开连接(使用停止按钮)时,connection_status()才会返回中止状态。在这种情况下,浏览器发送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 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);
这可能有助于:
注释
在尝试向客户端发送信息之前,PHP不会检测到用户已中止连接。仅使用echo语句并不能保证发送信息,请参阅
而且:
也许重写一下会有帮助:
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);
}
ignore\u user\u abort(false);
对于($i=0;$i<4;$i++){
ob_flush();
冲洗();
如果(连接被中止()){
回显“\r\n\r\n”;
ob_flush();
冲洗();
出口
}
文件内容($\u服务器['DOCUMENT\u ROOT']./test/test'.($i+1)。.log',“1\r\n”,文件附加);
睡眠(1);
}
尝试重新写入。还是不行。所有文件大小相同。直接进入浏览器中的地址并按下停止按钮也不起作用。你解决了吗?@poletaw“默认行为是在远程客户端断开连接时中止脚本。”尽管我很难验证这是一种实践。这是一个谎言。。。jquery没有向服务器发出用户中止的信号,或者php完全忽略了它。