增量输出 – Jquery和PHP

我有一个应用程序,对一大组项目进行评级,并为每个项目输出一个分数。

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

我想知道以下内容

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

对于这类问题,我将采用这种方法:

  1. 保留使用ob_start()ob_flush()的旧脚本,以便在浏览器中禁用javascript的用户。
  2. 对于启用了javascript的用户,一次加载一个预定义的数字内容。 要区分js启用用户与否,我想2页。 在第一页中,您将显示指向旧脚本的链接。 然后在此页面中放置一个jquery代码来拦截点击旧脚本的链接,因此单击该链接将显示(或创建)一个div ,然后将内容加载到该div
  3. 您可以使用setTimeout连续调用AJAX代码,然后在达到某个条件(Ex,空响应)后,您可以使用clearTimeout删除setTimeout 。 每个AJAX请求都需要有一个偏移参数,因此它将从上一次AJAX调用中获取内容。 收到响应后,增加下一个AJAX调用的偏移量。 您可以使用全局变量。
  4. 您可以使用一个简单的全局变量来防止在最后一个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_startob_flush在此方案中不起作用。

我希望这可以帮助您创建自己的代码。

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

您需要使系统复杂化以执行您想要的操作。

例..

  1. 你的php更新了一个进度的外部文件,你的jquery在某个时间间隔内轮询这个文件并显示进度..
    您将在ajax提交上启动间隔轮询,并在ajax上成功终止它。

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

我最终做的是设置php脚本来一次处理一个项目。 这可能也适用于您的情况。 你有没有jquery将某种物品标识符传递给只处理那一项的PHP脚本? 然后在回调中,您可以将该项目的数据放在页面中,也可以为下一个项目创建新的ajax请求。 换句话说,每个回调都会为下一个项目创建一个新请求,直到整个项目列表循环完成。

你怎么看?

-DLH