增量输出 – Jquery和PHP
我有一个应用程序,对一大组项目进行评级,并为每个项目输出一个分数。
在我的PHP脚本中,我使用ob_start和ob_flush来处理每个评级的数据输出。 如果我直接加载脚本,这很好用。 但是当我尝试通过jquery使用.get时,整个内容加载然后被放入容器中,而不是逐步添加。
我想知道以下内容
- 有没有办法在get完成之前启动数据放置?
- 我是否需要不断轮询脚本直到该过程完成?
- 是否有更有效的方式来显示数据而不是获取?
对于这类问题,我将采用这种方法:
- 保留使用
ob_start()
和ob_flush()
的旧脚本,以便在浏览器中禁用javascript的用户。 - 对于启用了javascript的用户,一次加载一个预定义的数字内容。 要区分js启用用户与否,我想2页。 在第一页中,您将显示指向旧脚本的链接。 然后在此页面中放置一个jquery代码来拦截点击旧脚本的链接,因此单击该链接将显示(或创建)一个
div
,然后将内容加载到该div
。 - 您可以使用
setTimeout
连续调用AJAX代码,然后在达到某个条件(Ex,空响应)后,您可以使用clearTimeout
删除setTimeout
。 每个AJAX请求都需要有一个偏移参数,因此它将从上一次AJAX调用中获取内容。 收到响应后,增加下一个AJAX调用的偏移量。 您可以使用全局变量。 -
您可以使用一个简单的全局变量来防止在最后一个AJAX仍在等待响应时运行AJAX请求,以防止竞争条件。 示例代码:
//锁定变量 var is_running = FALSE; // offset以0开头 var offset = 0; function load_content($){ //检查锁 if(!is_running){ //锁 is_running = true; //做AJAX $获得(URL, {PARAM}, 函数(RESP){ //将数据放入'div' // ... //如果为空,则调用clearTimeout // ... //在这里增加偏移 offset = offset + NUM_ITEM_FETCHED //释放锁定 is_running = false; }); } }
您必须注意使用AJAX调用时必须注意,必须手动确定响应,因为ob_start
和ob_flush
在此方案中不起作用。
我希望这可以帮助您创建自己的代码。
当整个页面加载完成后,Jquery将从ajax调用中获得成功状态..所以无论你在php中做什么都不会返回到调用页面,直到整个过程完成..(ajax是一个发送/一接收系统)
您需要使系统复杂化以执行您想要的操作。
例..
- 你的php更新了一个进度的外部文件,你的jquery在某个时间间隔内轮询这个文件并显示进度..
您将在ajax提交上启动间隔轮询,并在ajax上成功终止它。
我有一个类似的问题,我想要一个PHP脚本发送一系列的电子邮件,并更新jquery页面,如“发送23/50”。
我最终做的是设置php脚本来一次处理一个项目。 这可能也适用于您的情况。 你有没有jquery将某种物品标识符传递给只处理那一项的PHP脚本? 然后在回调中,您可以将该项目的数据放在页面中,也可以为下一个项目创建新的ajax请求。 换句话说,每个回调都会为下一个项目创建一个新请求,直到整个项目列表循环完成。
你怎么看?
-DLH