2008-09-16 47 views
5

有了这个代码在服务器脚本运行,我可以告诉GIF动画:如何在jQuery中显示服务器脚本的进度?

function calculateTotals() { 
    $('#results').load('getResults.php', null, showStatusFinished); 
    showLoadStatus(); 
} 

function showLoadStatus() { 
    $('#status').html(''); 
} 


function showStatusFinished() { 
    $('#status').html('Finished.'); 
} 

不过,我想显示多远沿脚本,例如状态“处理20000行的第342行...”并让它计数直到完成。

我该怎么做?我可以创建一个不断包含更新信息的服务器脚本,但是我可以在哪里将命令每秒读取一次?

回答

2

在阅读您对安德鲁的回答的评论之后。

,你会读这样的状态:

function getStatus() { 
    $.getJSON("/status.php",{"session":0, "requestID":12345}, 
    function(data) { //data is the returned JSON object from the server {name:"value"} 
      setStatus(data.status); 
      window.setTimeout("getStatus()",intervalInMS) 
    }); 
} 

使用这种方法,你可以在服务器上打开几个同时XHR请求。

所有status.php,输出是:

{"status":"We are done row 1040/45983459"} 

但是,您可以输出要在响应,并进行相应的处理(进料例如进度条或执行的动画许多信息。 。)

有关$ .getJSON更多信息,请参阅http://docs.jquery.com/Ajax/jQuery.getJSON

0

您的服务器端脚本应该以某种方式保持它在服务器(文件,数据库中的字段,memcached等)某处的进度。

你应该有AJAX函数返回当前的进度。每秒轮询一次该功能并相应地呈现结果。

0

不知道你的服务器端代码是如何工作的,这很难说。然而,这个过程有三个阶段。首先,您需要调用创建作业脚本。这将返回一个ID号码并设置服务器工作。接下来,每秒钟左右,您需要调用一个状态脚本,它返回您想要显示的状态消息。该状态脚本还需要返回一个值,指示作业是否已完成。状态脚本表示作业已完成时,停止轮询。

你如何得到这个状态脚本是要知道作业的状态很大程度上取决于服务器的设置方式,但可能涉及在作业期间的各个点将消息写入数据库表。状态脚本然后从数据库读取此消息。

+0

权,但我在哪里把它读取状态脚本行?这是我不明白的。我不能在我的showLoadStatus()函数中执行它,因为它只执行一次。 – 2008-09-16 12:27:41

1

我没有关注jQuery的细节,但不涉及投票的一般答案是:使用forever frame技术的变体。基本上,创建一个隐藏的iframe,并将其src设置为'getresults.php'。在getresults里面,“流”回脚本块,这是对父文档中实际更新进度的javascrpt函数的调用。这是an example,它显示了永久帧的基本思想。 (虽然我不推荐使用他的实际JS或HTML,但它的合理平均值)

相关问题