jQuery.ajax()是“请求结束时调用的函数”。假设我正在做一个Ajax请求ajax.php:什么时候jQuery.ajax()完成{}?
<?php
echo 'complete';
some_functions_that_echo_nothing();
?>
将完整必须等待some_functions_that_echo_nothing()?如果是这样,是否有办法让完整的{}直接在echo之后出现,并且仍然让ajax.php一直运行到最后?
jQuery.ajax()是“请求结束时调用的函数”。假设我正在做一个Ajax请求ajax.php:什么时候jQuery.ajax()完成{}?
<?php
echo 'complete';
some_functions_that_echo_nothing();
?>
将完整必须等待some_functions_that_echo_nothing()?如果是这样,是否有办法让完整的{}直接在echo之后出现,并且仍然让ajax.php一直运行到最后?
我不知道HttpResponse是如何工作的。它只是返回响应并保持脚本继续?这对我来说似乎很奇怪。不会持有你的Apache线程。所以这会降低服务器的性能? – Eduardo 2011-05-11 01:11:47
@eduardocereto。服务器接受一个包含所有数据的HTTP请求。然后你开始写回应。 'echo'基本上是'HTTPResponse :: write()'。当您发送HTTP响应时,您将HTML直接发送回客户端。然后你可以继续做一些处理。一旦你到达文件的末尾,你的处理应该停止。所有这一切都是提前发回页面,然后正常。 – Raynos 2011-05-11 08:01:14
Apache线程怎么样? – Eduardo 2011-05-11 18:07:15
我猜你要输出“完成”,并让背景功能运行,因为它是非常缓慢的。
在这种情况下,把这个功能放在一个单独的文件中。让它成为proc.php
并用这个代替:
<?php
echo "Complete';
exec ("/usr/bin/php proc.php >/dev/null &");
?>
这将立即返回并触发proc.php
文件在后台运行。当然,它不能输出它返回给用户,所以它应该在用户完成时邮寄给用户,或者做他自己的持久性。
编辑:ALWAYS采取格雷亚照顾你把里面exec
语句。如果您不是100%确定您正在非常仔细地对其进行消毒,请勿将用户输入放入其中。即使如此,您确实没有充分的理由将用户输入用于拨打exec
。
只需结束HTTP响应。 – Raynos 2011-05-09 20:32:15
是的,请求一直持续到PHP脚本执行结束。 – 2011-05-09 20:48:50