Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Javascript 如何在jQuery.get()中拥有进度条_Javascript_Jquery_Progress Bar - Fatal编程技术网

Javascript 如何在jQuery.get()中拥有进度条

Javascript 如何在jQuery.get()中拥有进度条,javascript,jquery,progress-bar,Javascript,Jquery,Progress Bar,是否可以用一个进度条来衡量jQuery.get()的进度?如果您能够将服务器正在处理的任务划分为多个处理块,那么您可以让服务器响应调用另一个$.get()并以这种方式更新进度条 function get_chunk(chunk_number, max_chunks){ $.get('eg.php?chunk=' + chunk_number, function(){ chunk_number++; if(chunk_number < max_chun

是否可以用一个进度条来衡量jQuery.get()的进度?

如果您能够将服务器正在处理的任务划分为多个处理块,那么您可以让服务器响应调用另一个
$.get()
并以这种方式更新进度条

function get_chunk(chunk_number, max_chunks){
    $.get('eg.php?chunk=' + chunk_number, function(){
        chunk_number++;
        if(chunk_number < max_chunks){
            get_chunk(chunk_number, max_chunks)
        }
        update_status_bar(chunk_number, max_chunks);
    }
}
函数获取块(块数,最大块数){
$.get('eg.php?chunk='+chunk\u编号,函数(){
chunk_number++;
if(块数<最大块数){
获取块(块数,最大块数)
}
更新块状态栏(块编号、最大块);
}
}

否则,您将不得不研究一种web应用程序模型,例如使用服务器端推送,客户机不必发出请求就可以将数据发送到客户机。在当前版本的jQuery中,这并不是现成的,但仍然可以不费吹灰之力

您应该收听jQuery允许您访问的
XMLHttpRequest
事件的
progress
。例如:

这里是链接到

您可能还想看一看,以避免自己做这件事


注:

  • 一些较旧的浏览器可能不支持
    进度
    事件

  • 要计算下载进度,您必须知道要下载的资源的大小,即服务器必须发送
    内容长度
    HTTP头。如果大小未知,则无法计算进度。这就是
    进度
    事件的
    长度可计算
    属性的作用


不可能。怎么可能呢?如果你可以将服务器正在执行的过程划分为可以一个接一个调用的函数,这可以在大多数(如果不是所有的话)技术上完成。这对于检索图像这样的事情来说不一定不需要一点工作,但是如果你需要返回数据,那么可以说是一个结果列表base您可以限制来自数据库的结果,一次返回100个,而不是整个结果集(比如100000个)。您将如何确定哪个用户下载了哪个文件?会话?Php使用会话锁,以便会话文件在任何时候只能由一个请求使用。任何时候都将只有一个请求一次。当一个请求结束时,下一个请求开始。我的错。我误解了你的解决方案。这是一个糟糕的解决方案,存在XHR进度事件是有原因的。
$.ajax(
{
  type: 'POST', // 'POST' here so that _upload_ progress _also_ makes sense; 
                // Change to 'GET' if you need. 
  url: "/", data: {}, 
  beforeSend: function(XMLHttpRequest)
  {
    //Upload progress
    XMLHttpRequest.upload.addEventListener("progress", function(evt){
      if (evt.lengthComputable) {  
        var percentComplete = evt.loaded / evt.total;
        //Do something with upload progress
      }
    }, false); 

    //Download progress
    XMLHttpRequest.addEventListener("progress", function(evt){
      if (evt.lengthComputable) {  
        var percentComplete = evt.loaded / evt.total;
        //Do something with download progress
      }
    }, false); 
  },

  success: function(data){
    // successful completion handler
  }
});