Ruby on rails 使用jQuery更新rails中的进度条
我是JavaScript/jQuery的新手,我相信这是一个非常简单的问题;然而,我无法完成它 我有一个异步任务正在执行(由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
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”
。发生这种情况时,我希望停止更新
通过阅读我的问题,我似乎什么都没试过,只是希望有人为我写代码。让我补充一些意见:
- 我知道我应该使用
每隔“x”秒更新一次属性setInterval
- 我知道我应该使用
来设置新的百分比$('.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状态宝石。