Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在jQuery中显示服务器脚本的进度?_Jquery_Ajax - Fatal编程技术网

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

如何在jQuery中显示服务器脚本的进度?,jquery,ajax,Jquery,Ajax,使用此代码,我可以在服务器脚本运行时显示动画gif: function calculateTotals() { $('#results').load('getResults.php', null, showStatusFinished); showLoadStatus(); } function showLoadStatus() { $('#status').html(''); } function showStatusFinished() { $('#st

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

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

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


function showStatusFinished() {
    $('#status').html('Finished.');
}
但是,我想显示脚本的状态,例如“处理20000行342…”,并将其计数,直到完成为止


我该怎么做?我可以制作一个不断包含更新信息的服务器脚本,但我应该把命令放在哪里,比如说,每秒读取一次?

您的服务器端脚本应该以某种方式将其进度保持在服务器上的某个位置(文件、数据库中的字段、memcached等)


您应该具有返回当前进度的AJAX函数。每秒轮询此函数一次,并相应地呈现结果

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


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

我对jQuery的细节不感兴趣,但一个不涉及轮询的一般答案是:使用该技术的变体。基本上,创建一个隐藏的iframe,并将其src设置为“getresults.php”。在getresults中,您可以“流式”返回脚本块,这些脚本块是对父文档中实际更新进度的javascrpt函数的调用。这张照片展示了永恒框架背后的基本理念。(我不建议使用他实际的JS或HTML,这是相当普通的)

阅读您对Andrew答案的评论后

您可以这样读取状态:

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的更多信息,请参见

右侧,但我应该将读取状态脚本的行放在哪里?这就是我不明白的。我不能在showLoadStatus()函数中执行,因为它只执行一次。