如何在jQuery中显示服务器脚本的进度?

时间:2008-09-16 12:08:46

标签: jquery ajax

使用此代码,我可以在服务器脚本运行时显示动画gif:

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

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


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

但是,我希望显示脚本在多远的状态,例如: “20000处理生产线342 ......”并将其计算完毕直至完成。

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

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

我并不满足于jQuery的细节,但是一个不涉及民意调查的一般答案是:使用forever frame技术的变体。基本上,创建一个隐藏的iframe,并将其src设置为'getresults.php'。在getresults里面,您“流”回脚本块,这些脚本块调用父文档中实际更新进度的javascrpt函数。这里的an example显示了永久框架背后的基本思想。 (我不建议使用他的实际JS或HTML,但这是相当平均的)

答案 2 :(得分:0)

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

您应该让AJAX函数返回当前进度。每秒轮询一次此函数并相应地渲染结果。

答案 3 :(得分:0)

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

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