我正在使用AJAX更新数据库中的某些值.所有人的工作都很棒,但是现在我想实现一些日志记录的东西.日志记录功能看起来将要花费大量的处理时间,因此用户无须等待它们完成以查看其AJAX结果.
因此,我试图找到一种发送AJAX结果并且仍然继续在服务器端进行处理的方法.我的研究提出了ignore_user_abort函数,但是显然我没有正确使用它.
This guide是我基于代码的基础.
这是我的JavaScript(Jquery):
$.ajax({
type: "GET",
url: "ajax.PHP",
data: { "mydata": mydata },
success: function(msg) {
$("span#status").fadeOut(200, function() {
$("span#status").html(msg);
$("span#status").fadeIn(200);
});
}
});
而我的PHP:
$response = "This is my response";
//Begin code from link
ob_end_clean();
header("Connection: close");
ignore_user_abort(true);
ob_start();
echo $response;
header("Content-Length: " . mb_strlen($response));
ob_end_flush();
flush();
//End code from link
echo "I should not see this text";
不幸的是,我在flush()之后看到了该文本;
有任何想法吗?
更新-修复:我发现了我的错误.在逐字地复制大量不同的代码建议后,我发现这肯定是我的apache / PHP配置中的错误.原来我需要添加两行来强制apache不缓冲我的结果:
apache_setenv('no-gzip', 1);
ini_set('zlib.output_compression', 0);
解决方法:
好吧,你会看到的,不是吗?你告诉它回声!
认真地说,您的榜样应该有效.刷新后似乎正在执行代码,因此,如果刷新将请求发送到浏览器,则应该能够进行日志记录.