2010-12-17 41 views
2

我要寻找一个解决方案,使PHP页面将加载在它的所有其他信息说的内容/图像如有然后做一个动作的动作,其将需要一些时间来完成并显示其结果。我想PHP页面与其他信息第一次加载&然后做

由于操作需要很长时间,PHP页面加载速度太慢。我希望我的客户先看到页面,然后执行最后显示结果的操作。

我试图与ob_start()&平齐(),但没有成功。 它可能需要Javascript来启动我认为如此的操作。但我怎么能这样做。

+0

一样始终。在'onLoad'中。 – 2010-12-17 20:22:23

+0

您的意思是用JavaScript。请指定 – 2010-12-17 20:23:49

+1

是的,Javascript(AJAX)是这种功能的常用选项。我可以推荐查看jQuery。与自己编写Ajax相比,这使得Ajax变得更容易。 – 2010-12-17 20:32:16

回答

0

您需要加载没有“慢速呼叫”的页面。在onload事件中或在网页末尾的脚本中,执行XHR呼叫到服务器以获取慢速数据。默认情况下该调用是异步的,因此用户可以在等待呼叫返回的同时与网页进行交互。在这一点上,您将获取数据并使用JavaScript将其转换为HTML。

+0

你可以给一些链接,做相同的引用。以便我可以理解工作并在我的工作 – 2010-12-17 20:29:30

1

这是一个PHP的操作?由于php是一种服务器端语言,它在用户收到http响应之前执行。所以你必须先建立网站。将其发送给用户。比对需要执行操作的脚本发出新的请求(例如使用ajax)。这是应执行的订单代码。

  • PHP(Serverside集团):建立自己的网站,执行 主要的PHP代码
  • HTML(客户方):HTML是建立,图像和Java脚本文件被加载
  • 使用Javascript(客户方):创建新的httprequest(异步)与您的操作的PHP文件。由于操作时间长了,请注意超时。根据需要设置自定义超时时间。
  • PHP(Serverside集团)执行长opperation并返回结果(请确保您的PHP服务器不会超时,认为默认是对于大多数服务器30秒)
  • 使用Javascript(客户方):做一些事情的结果ajax处理程序。

一些handly链接。

Ajax tutorial of w3schools
jQuery ajax api with examples

-1

你的onload使用,在很短的时间控制定时事件。这将让屏幕画出来。

当事件触发时,使用AJAX技术启动您的漫长过程。

您无法长时间尝试在服务器上运行进程。经过一段时间(通常为300秒),一个失控计时器将杀死你的服务器线程。为避免这种情况,您的漫长过程必须使用轮询技术,或者不在正常的Web服务器环境下运行。

如果要超过20秒或30秒运行,然后保存某种形式的会话状态,并返回一个“工作”的答复。在关闭下一个周期之前,使用回复更新用户的进度。这会加载并定位自己的会话数据,并且运行很短的时间。

警告 - php会仔细地串行化会话数据的所有访问权限,所以当服务器处理一个循环时,用户发送的任何内容都将等待该循环结束,然后才能处理。

1

jQuery让这非常容易,因为这样...

<script type="text/javascript" src="jquery-1.4.4.min.js"></script> <!-- Put this in your web page's head --> 
<script type="text/javascript"> 
$(function() { 
    $('wherever-you-need-the-resulting-html-to-go').html('<img src="loading-image.gif" alt="Loading" />'); 
    $.ajax({ 
     url: 'wherever-your-slow-code-is.php', 
     success: function(msg) { 
      $('wherever-you-need-the-resulting-html-to-go').html(msg); 
      } 
     }); 
    }); 
</script> 
+0

将你的慢速功能放在一个单独的php文件中。上面的ajax调用将轮询该函数,然后一旦处理完成,将数据插入到您想要的位置。 – 65Fbef05 2010-12-17 20:41:51

+0

这确实假设客户端具有JavaScript,因此不像从初始PHP页面进行内联处理那样可靠。对于固体代码示例,仍然为+1。 – zanlok 2010-12-17 21:21:11

+0

你不能让你的多部分页面加载并吃掉它吗?哈哈! – 65Fbef05 2010-12-17 21:41:25

相关问题