在脚本运行之前终止与浏览器的连接

时间:2012-03-07 05:24:15

标签: php javascript browser xmlhttprequest

我有一个脚本,它接受一个上传的文本文件,解析它,然后将相当多的行插入数据库。这个过程大约需要一分钟。

即使我正在使用AJAX,我也不希望我的用户在填充数据库时必须看到加载...超过一分钟。实际上,一旦解析成功完成,数据库INSERTS将始终有效,因为在解析过程中所有内容都已经过验证。

因此,我需要做的是在解析成功后立即返回JSON字符串{success:true,data:{cartons: 1000, batchname:"Batch1"}}。我这样做,但浏览器不会解析响应,直到连接关闭(脚本通过运行)无论如何是让浏览器接受响应,或者让我关闭与浏览器的连接我的PHP脚本继续运行?

我使用ExtJS作为处理AJAX的Javascript框架。有任何想法吗?这已经让我的大脑震动了大约一个星期。

1 个答案:

答案 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请求。