Ruby on rails 使用jQuery更新rails中的进度条

Ruby on rails 使用jQuery更新rails中的进度条,ruby-on-rails,ajax,jquery,Ruby On Rails,Ajax,Jquery,我是JavaScript/jQuery的新手,我相信这是一个非常简单的问题;然而,我无法完成它 我有一个异步任务正在执行(由sidekiq),它的进度可以通过模型(percentage\u complete)中的一个方法获得,该方法从Redis检索它的进度 我希望在模型的show视图中显示一个进度条,并希望它使用AJAX每x秒更新一次 进度条在show.html.erb文件中显示如下: <div class="progress"> <div class="bar" styl

我是JavaScript/jQuery的新手,我相信这是一个非常简单的问题;然而,我无法完成它

我有一个异步任务正在执行(由
sidekiq
),它的进度可以通过模型(
percentage\u complete
)中的一个方法获得,该方法从Redis检索它的进度

我希望在模型的
show
视图中显示一个进度条,并希望它使用AJAX每x秒更新一次

进度条在
show.html.erb
文件中显示如下:

<div class="progress">
  <div class="bar" style="width: <%= @model.percentage_complete %>%;"></div>
</div>

如何设置jQuery脚本以异步更新此属性

编辑

我还有一个a
:status
属性,在任务完成时设置为do
“done”
。发生这种情况时,我希望停止更新

通过阅读我的问题,我似乎什么都没试过,只是希望有人为我写代码。让我补充一些意见:

  • 我知道我应该使用
    setInterval
    每隔“x”秒更新一次属性
  • 我知道我应该使用
    $('.progress.bar').width(%)
    来设置新的百分比

但是,由于我不熟悉jQuery和JavaScript,特别是在Rails中,我不确定这个脚本是应该加载到视图中,还是应该加载到视图本身。

我通过创建一个操作来检索状态来解决这个问题

# GET /status/1.json
def status
  @batch = Batch.find(params[:id])

  respond_to do |format|
    format.json
  end
end
并使用以下JavaScript:

<script type="text/javascript">
function progress(){
    var progress = setInterval(function() {
      var $bar = $('.bar');
      var $pct = $('#pct');
      $.get("<%= @batch.id %>/status.json", function(data){
        if (data.status == "done") {
          location.reload();
        } else {
          $bar.width(data.progress+"%");
          $pct.text(data.progress+"%");
        }
      });
    }, 800);
}

$(document).ready(function() {
  $.get("<%= @batch.id %>/status.json", function(data) {
    if (data.status == "processing") {
      progress();
    }
  });
});
</script>

功能进展(){
var progress=setInterval(函数(){
变量$bar=$('.bar');
var$pct=$(“#pct”);
$.get(“/status.json”,函数(数据){
如果(data.status==“完成”){
location.reload();
}否则{
$bar.width(数据进度+“%”);
$pct.text(data.progress+“%”);
}
});
}, 800);
}
$(文档).ready(函数(){
$.get(“/status.json”,函数(数据){
如果(data.status==“处理”){
进步();
}
});
});

伙计,我也在为文件上传做同样的事情。您提供的这段代码很好,符合逻辑,并且正是需要做的事情,我从JQ的角度考虑了同样的事情;但说到rails,我就陷入了困境。如何询问rails的“上传文件”操作:上传了多少数据??我不知道如何检索上传状态。在JS中(
XHR
):有一个
progress
事件侦听器,我可以做:
XHR.upload.addEventListener(“progress”,回调,false)回调(evt){}
函数中执行任何操作。如何在rails中完成同样的工作?sidekiq状态宝石。