我正在尝试执行一个AJAX调用(通过JQuery),它将启动一个相当长的过程。我希望脚本只发送一个响应,指示进程已经启动,但是JQuery在PHP脚本运行完成之前不会返回响应
我尝试过使用“关闭”标题(如下),也尝试过输出缓冲;两者似乎都不起作用。猜猜看?或者这是我在JQuery中需要做的事情
<;?php
echo(“我们会尽快给您发送电子邮件。”);
标题(“连接:关闭”);
//做一些需要一段时间的事情
邮件('[email protected]“好了,我做完了”,“是的,都做完了。”);
?>;
以下PHP手册页面(包括用户注释)提供了有关如何在不结束PHP脚本的情况下关闭与浏览器的TCP连接的多条说明:
- 连接处理文档
据推测,它需要的不仅仅是发送一个关闭的头
OP随后确认:是的,这就成功了:指向用户注释71172(2006年11月)复制到这里:
自[php]4.1以来,在保持php脚本运行的同时关闭用户浏览器连接一直是一个问题,当时
register\u shutdown\u function()的行为被修改为不会自动关闭用户连接sts在mail dot xubion dot hu发布了原始解决方案:
<;?php 标题(“连接:关闭”); ob_start(); phpinfo(); $size=ob_get_length(); 标题(“内容长度:$size”); ob_end_flush(); 冲洗(); 睡眠(13); 错误日志(“在后台做某事”); ?>;在将
echo('text I want user see')替换为phpinfo()之前,这一切都很正常在这种情况下,不会发送标题解决方案是在发送头信息之前显式关闭输出缓冲并清除缓冲区。例如:
<;?php ob_end_clean(); 标题(“连接:关闭”); 忽略用户中止(真);//为了安全起见 ob_start(); echo(“用户将看到的文本”); $size=ob_get_length(); 标题(“内容长度:$size”); ob_end_flush();//奇怪的行为,是行不通的 flush();//除非两者都叫! //在这里处理吗 睡眠(30); echo(“文本用户将永远看不到”); ?>;我花了3个小时想弄明白这一点,希望它能帮助别人:)
测试地点:
- IE 7.5730.11
- Mozilla Firefox 1.81
2010年7月晚些时候,在一个相关的回答中,北极大火将另外两个用户注释链接到上面的注释:
- 连接处理用户说明#89177(2009年2月)
- 连接处理用户说明#93441(2009年9月)