我有一个应用程序,评估一大组项目,并输出每一个分数。增量输出 - jquery和PHP
在我的php脚本中,我使用ob_start和ob_flush来处理每个评级的数据输出。如果我直接加载脚本,这很好用。但是,当我尝试通过jQuery使用.get时,整个内容会加载,然后放入容器中,而不是逐步添加。
我想知道以下
- 有没有办法来启动数据放置的get完成之前?
- 我是否需要不断轮询脚本,直到过程完成?
- 有没有更有效的方式来显示数据而不是get?
我有一个应用程序,评估一大组项目,并输出每一个分数。增量输出 - jquery和PHP
在我的php脚本中,我使用ob_start和ob_flush来处理每个评级的数据输出。如果我直接加载脚本,这很好用。但是,当我尝试通过jQuery使用.get时,整个内容会加载,然后放入容器中,而不是逐步添加。
我想知道以下
对于这种问题,我都会有这样的方法:
ob_start()
和ob_flush()
的,在他们的浏览器禁用javascript用户旧脚本。div
,然后将该内容加载到该div
中。setTimeout
连续调用AJAX代码,然后在达到特定条件(例如,空响应)后,您可以使用clearTimeout
删除setTimeout
。每个AJAX请求都需要一个偏移参数,所以它会从上一次AJAX调用中获取内容。收到响应后,增加下一个AJAX调用的偏移量。你可以为此使用全局变量。您可以使用一个简单的全局变量来阻止AJAX请求在最后一次AJAX仍在等待响应时运行,以防止出现竞争情况。示例代码:
//lock variable var is_running = FALSE; //offset start with 0 var offset = 0; function load_content($) { //check lock if (! is_running) { //lock is_running = true; //do AJAX $.get(URL, { PARAM }, function(resp){ //put data to 'div' //... //if empty, then call clearTimeout //... //increase offset here offset = offset + NUM_ITEM_FETCHED //release lock is_running = false; }); } }
你一定要注意,使用AJAX调用,你必须手动确定响应,因为ob_start
和ob_flush
将在这种情况下没有效果的点。
我希望这会帮助你创建你自己的代码。
当完整的页面完成加载时,jquery将从ajax调用中获得成功状态..所以无论你在php中做什么,在整个过程结束之前都不会返回到调用页面。(ajax是一发送/一个接收系统)
你需要你的系统变得复杂,做你想要的东西..
例子..
我有一个类似的问题一段时间回来,我想PHP脚本发送一系列电子邮件并更新jquery页面来说“发送23/50”。
我最终什么事做的是建立PHP脚本在一次处理一个项目。这可能也适用于你的情况。你可以让jquery传递某种类型的项目标识符给一个处理这个项目的php脚本吗?然后在回调中,您可以将该项目的数据放置在页面中,并为下一个项目创建新的ajax请求。换句话说,每个回调都会为下一个项目创建一个新的请求,直到整个项目列表都被循环遍历为止。
您认为如何?
-DLH