CodeIgniter和进度条

时间:2011-12-29 21:12:49

标签: codeigniter progress-bar

我的模型中有几种方法,由我的控制器调用。在客户端上,我想在模型方法运行时更新进度条。

如何与控制器通信以获得进展?

4 个答案:

答案 0 :(得分:4)

确实,您需要使用AJAX / long轮询来完成这项工作。这是XMLHttpRequest2。对我来说,这已经将网络带到了新的水平。是时候让我们使用它了。我用它与jquery。可能更容易理解我所做的事情。可能需要一些调整才能使其正常工作。这就是..

$.ajax({
type: 'POST/GET',
url: "link/to/controller/method",
data: {whatever = 'foo'},
beforeSend: function(XMLHttpRequest)
{
  //Upload progress
  XMLHttpRequest.upload.addEventListener("progress", function(evt){
    if (evt.lengthComputable) {  
     var percentComplete = evt.loaded / evt.total;
     $( ".jquery-uploadbar-selector" ).progressbar({ value: percentComplete }); //jquery progress bar for upload
    //incase you wanted an upload bar
   }
 }, false); 
 //Download progress
 XMLHttpRequest.addEventListener("progress", function(evt){
   if (evt.lengthComputable) {  
     var percentComplete = evt.loaded / evt.total;
     $( ".jquery-downloadbar-selector" ).progressbar({ value: percentComplete });
   //jquery progress bar for download or in other words The real answer for question
   }
 }, false); 
},
success: function(data){
  //Here goes the end of what you have done.. I would just type.. 
  console.log('Yay!! I guess, I ve answered my first bounty question and hoping to see it work well.');
 }
});

希望它有效..如果我错了,请告诉我。

答案 1 :(得分:1)

你不能使用PHP,因为PHP是服务器端,当它完成工作后,结果会被发送到浏览器。

您可以使用Javascript进行AJAX调用(google this,这是一种在不重新加载页面的情况下调用服务器的方法),每次完成模型的方法时,您可以将“加载”添加到进度条使用JS。但实际上在PHP中,没有办法知道已经完成了多少动作

答案 2 :(得分:0)

有很多方法可以通过Apache和NGINX上传文件,但这不适用于您的情况。

这样做的一种方法是使用AJAX长轮询来监视控制器的特殊控制器或方法,以便在它发生变化时查找更新并在前端进行更新。

答案 3 :(得分:0)

  1. 与客户端(用户)打开http连接,并在启动作业时向客户端发送数据(isWaiting = 1)或执行ajax轮询,如Asiq所说并获取等待状态。
  2. 在html客户端页面上,javascript在isWaiting = 1时加载进度条
  3. 具有此内部标记的html页面
  4. <div class="overlay" style="display:none;"></div>
    

    和css

      

    .overlay {width:100%;高度:100%;的z-index:5000; left:0; / IE / top:0;               文本对齐:中心;位置是:固定;               background:url('https://memberschemes.rics.org/MembersPortal/images/ajax_loader-2.gif')no-repeat固定中心;               background-color:#EFEFEF;               不透明度:0.7;               / *               背景:#F4F4F4;               background-repeat:no-repeat;               背景位置:中心;               * /            }