题
有一种方式来显示的进展吧php?我喜欢让用户知道什么php script是这样做的。
这一结果的例子,从我的网站 http://www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book
我有一个静态加载图像用一些文字,说"Loading..."的时候,该网页是全面装载的,我躲在装载div。我php script出去的亚马逊api,ebay api和屏幕上的擦伤的一对夫妇的其他网站并不是一个静态加载div我想要更新,载div与下
加载amazon.com
//进展亚马逊,当完成之后更新载div
加载ebay.com
等等。等等。
这是可以做到的?如果那么什么是最好的办法?谢谢你提前时间,用于帮助!
解决方案
使用AJAX询问PHP目前正在做什么,并建立一个队列系统来定义完成或未完成的任务。这是一个非常基本的例子:
任务开始时,设置以下变量:
使用AJAX询问PHP目前正在做什么,并建立一个队列系统来定义完成或未完成的任务。这是一个非常基本的例子:
任务开始时,设置以下变量:
<*>
一旦PHP加载eBay,它会将isEbayLoaded设置为true,然后AJAX可以简单地询问PHP是否已经加载了ebay,然后是亚马逊,然后是你需要的任何其他东西。所有PHP必须做的是检查这些变量是否设置为true,这意味着任务已经完成。
SESSION['isEbayLoaded'] = false;
使用AJAX询问PHP目前正在做什么,并建立一个队列系统来定义完成或未完成的任务。这是一个非常基本的例子:
任务开始时,设置以下变量:
<*>
一旦PHP加载eBay,它会将isEbayLoaded设置为true,然后AJAX可以简单地询问PHP是否已经加载了ebay,然后是亚马逊,然后是你需要的任何其他东西。所有PHP必须做的是检查这些变量是否设置为true,这意味着任务已经完成。
SESSION['isAmazonLoaded'] = false;
一旦PHP加载eBay,它会将isEbayLoaded设置为true,然后AJAX可以简单地询问PHP是否已经加载了ebay,然后是亚马逊,然后是你需要的任何其他东西。所有PHP必须做的是检查这些变量是否设置为true,这意味着任务已经完成。
其他提示
我之前用一个非常简单的解决方案完成了这个:
ob_flush();
所需要的只是创建一个具有适当类名的div:
<div class="loading">
Loading...
</div>
然后,我的PHP基本上是:
foreach ($sites as $site) {
printAndFlush(<<<CSS
<style>
div.loading {
background: url($site.png) no-repeat right center;
}
</style>
CSS;
scrapeSite($site);
}
这会使用背景样式来显示您要抓取的网站。
如果您必须使用标记,则只需打印出新的“加载”即可。每次使用div(使用唯一ID),以及将前一个div的样式设置为“display:none”的样式。
当然,请记住,在渲染任何内容之前,某些浏览器需要至少1024个字节(少于4k!)。
最好的方法是让你的javascript对服务器进行ajax调用并找出它所在的位置,这样你就可以向用户提供一些反馈。
您可以从上传进度条开始,然后继续显示应用程序的进度。
我会请一个要求为每个网站,并使用的输出,从该网页(XML式,无论)以让其他的网页知道这是怎么回事。
例如...伪码:
- 收集站
- 为循环,ajax页
- 阿贾克斯页返回每个请求用一个状态消息,例如-"载入亚马逊。..."
这就是它!