我有一个脚本,它接受一个上传的文本文件,解析它,然后将相当多的行插入数据库。这个过程大约需要一分钟。
即使我正在使用AJAX,我也不希望我的用户在填充数据库时必须看到加载...超过一分钟。实际上,一旦解析成功完成,数据库INSERTS将始终有效,因为在解析过程中所有内容都已经过验证。
因此,我需要做的是在解析成功后立即返回JSON字符串{success:true,data:{cartons: 1000, batchname:"Batch1"}}
。我这样做,但浏览器不会解析响应,直到连接关闭(脚本通过运行)无论如何是让浏览器接受响应,或者让我关闭与浏览器的连接我的PHP脚本继续运行?
我使用ExtJS作为处理AJAX的Javascript框架。有任何想法吗?这已经让我的大脑震动了大约一个星期。
答案 0 :(得分:1)
只需指定响应正文内容的长度:
$out = 'Return this';
header("Content-Length: " . strlen($out));
header("Connection: close");
echo $out;
flush();
echo 'But do not return this';
// create some file to show that script continues its execution
file_put_contents('script.is.running', '');
此外,您可以在后台从命令行运行其他脚本(无需等待完成),也可以对脚本中的ignore_user_abort
函数执行http请求。