2010-01-26 71 views
1

我有一个应用程序,评估一大组项目,并输出每一个分数。增量输出 - jquery和PHP

在我的php脚本中,我使用ob_start和ob_flush来处理每个评级的数据输出。如果我直接加载脚本,这很好用。但是,当我尝试通过jQuery使用.get时,整个内容会加载,然后放入容器中,而不是逐步添加。

我想知道以下

  1. 有没有办法来启动数据放置的get完成之前?
  2. 我是否需要不断轮询脚本,直到过程完成?
  3. 有没有更有效的方式来显示数据而不是get?

回答

2

对于这种问题,我都会有这样的方法:

  1. 记住,使用ob_start()ob_flush()的,在他们的浏览器禁用javascript用户旧脚本。
  2. 对于启用javascript的用户,一次加载一个预定义的号码内容。为了区分js启用用户而不是,我正在考虑2页。在第一页显示旧脚本的链接。然后在这个页面上放置一个jQuery代码来拦截点击旧脚本的链接,因此点击该链接将显示(或创建)一个div,然后将该内容加载到该div中。
  3. 您可以使用setTimeout连续调用AJAX代码,然后在达到特定条件(例如,空响应)后,您可以使用clearTimeout删除setTimeout。每个AJAX请求都需要一个偏移参数,所以它会从上一次AJAX调用中获取内容。收到响应后,增加下一个AJAX调用的偏移量。你可以为此使用全局变量。
  4. 您可以使用一个简单的全局变量来阻止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_startob_flush将在这种情况下没有效果的点。

我希望这会帮助你创建你自己的代码。

1

当完整的页面完成加载时,jquery将从ajax调用中获得成功状态..所以无论你在php中做什么,在整个过程结束之前都不会返回到调用页面。(ajax是一发送/一个接收系统)

你需要你的系统变得复杂,做你想要的东西..

例子..

  1. 你的PHP更新进步的外部文件,你的jquery民意调查是文件中的某些时间间隔和显示进度..
    你会开始在阿贾克斯的间隔轮询提交,并在阿贾克斯成功终止它..
1

我有一个类似的问题一段时间回来,我想PHP脚本发送一系列电子邮件并更新jquery页面来说“发送23/50”。

我最终什么事做的是建立PHP脚本在一次处理一个项目。这可能也适用于你的情况。你可以让jquery传递某种类型的项目标识符给一个处理这个项目的php脚本吗?然后在回调中,您可以将该项目的数据放置在页面中,并为下一个项目创建新的ajax请求。换句话说,每个回调都会为下一个项目创建一个新的请求,直到整个项目列表都被循环遍历为止。

您认为如何?

-DLH