在php脚本完成之前通过jquery load()函数从php脚本获得结果

时间:2010-08-13 16:12:40

标签: php javascript jquery

我有以下情况:

的jquery:

  $(function(){
      $('input[type="button"]').click(function(){
        $('#result').load('script.php');   
      }); 
 });

的script.php:

<?php
  echo "1";
    sleep(2);
  echo "2";
    sleep(2);
  echo "3";
?>

目前,jquery加载函数将等待php脚本完成,然后将结果显示到目标div ...所以在这种情况下它将等待4秒然后显示123。

我想要实现的是让jquery加载函数在php脚本完成之前单独返回结果。通过单独我的意思是在目标div 1中看到然后等待2秒,然后看2,然后再看2秒然后3。

我的例子可以吗?

3 个答案:

答案 0 :(得分:1)

在服务器端进行临时操作的坏主意,你应该在客户端使用setTimeout函数执行:从服务器获取即时响应,然后在客户端上使用它:

$.get('script.php', function(data){
    $('#div1').yourcode();
    setTimeout(function(){
        $('#div2').yourcode();
    }, 2000);
});

答案 1 :(得分:1)

没有。开箱即用,jQuery.load()无法实现。之前的两个答案是正确的 - 您需要重新编写XMLHttpRequest,这将是一个非常复杂的项目,或者您必须使用Javascript(setTimeout)轮询您的服务器并从服务器获取离散值以显示在客户端。如果不知道你正在尝试做什么,我会建议使用darma所建议的后一种方法(轮询)。

答案 2 :(得分:0)

我认为你不能用jquery做到这一点,因为据我所知,你传递的任何回调/处理函数在XMLHttpRequest完成(或达到就绪状态)之后才会运行4意味着要求完成)。您可以在php中使用flush()在echo之后发送输出,然后使用您自己的ajax XMLHttpRequest对象/脚本,并查找另一个应该包含部分请求数据的就绪状态,例如3。这是一个PITA,但主要是因为浏览器与就绪状态不一致而且我还没有看到一个可以做到这一点的预制库,所以你可能不得不自己写一些东西。

Some info about using ready states