试图让PHP将html发送到服务器中间脚本

时间:2012-12-11 19:26:09

标签: php javascript html

我正在尝试使用各种“加载消息”让我知道PHP脚本在执行过程中的位置;为了做到这一点,我试图在整个过程中回显HTML / javascript标记,但是在脚本的其余部分运行之前,没有任何回声正在执行。除了使用AJAX之外,还有什么方法可以解决这个问题,还是仅仅是野兽的本性?

4 个答案:

答案 0 :(得分:1)

Ajax听起来像是要走的路。使用一个请求启动大操作,并使用另一个请求定期轮询。

但值得注意的是,如果您正在使用会话:PHP的默认会话处理程序会阻塞session_start,因此您无法处理同一会话的两个请求。第二个将等到第一个会话关闭。如果您的轮询在大型操作完成之后没有返回响应,那么您将不得不解决此问题。

如果操作非常大,请考虑在后台而不是在请求期间运行它。您可以每隔一秒左右刷新一次进度页面。不是很优雅,但可能更容易实现。

答案 1 :(得分:0)

您可以让脚本从您的服务器请求另一个文件,并在GET中传递信息。但我不会向任何人推荐这个。除了调试之外,它基本上没用。

这甚至不能使用ajax来完成,因为php完全在服务器上执行。 Ajax请求是从用户的浏览器执行的。

实现此目的的另一种方法是在进行时插入sql。

编辑:如果您想要实时获取此信息。完成并不容易。您需要将上面发布的内容与ajax混合在一起请求另一页中的信息。

答案 2 :(得分:0)

我建议用AJAX做两个请求。第一个请求将一直有效,直到工作完成。第二个请求将每隔几秒重复一次,从数据库中提取数据并回显JSON中的进度,然后由JavaScript解析并更新进度。你甚至可以在其上做一些进度条!

答案 3 :(得分:0)

您可以使用flushob_flush(首次使用ob_start开始之后) - 但不同的浏览器会处理以不同方式发送给他们的早期内容。一直以来都是如此的规则(我最近没有检查过)是大多数浏览器在收到一定数量的字节之前不会开始渲染任何内容。

现在,正如您所知,有更好的方法可以做到这一点。 Ajax可能是最好的。但是我在许多后端管理脚本中使用了这个系统,它运行良好。基本上,首先要执行以下操作:

ob_start();
echo strpad('', 1024, ' ');
ob_flush();
echo '<script>updateProgress(0.1);</script>';ob_flush();
/// do something else
echo '<script>updateProgress(0.2);</script>';ob_flush();
/// do something else...
echo '<script>updateProgress(0.3);</script>';ob_flush();