我有一个应用程序,它使用SuckerPunch gem和Carrierwave Backgrounder在rails应用程序的背景中上传和处理图像。因此,当用户创建资产模型的实例时,在处理图像时,资产模型中有一个属性attachment_processing?
设置为 true。我使用此视图模板向用户指出这一点
-if instance.send(base_name)
.form-row
- if instance.send(base_name).attachment_processing?
.image_processing
%span Processing Asset #{proccessing_asset_name(instance.send(base_name))}
= image_tag("ajax-loader.gif")
- else
= nice_asset(instance.send(base_name),options[:thumb])
资产处理完毕后,属性设置为 false,页面刷新后图像显示 BUG。查看服务器日志,这将在完成处理后自动启动。
Started GET "/assets/ajax-loader.gif" for 127.0.0.1 at 2014-11-21 16:10:38 +0000
(0.2ms) BEGIN
SQL (0.4ms) UPDATE `assets` SET `attachment_processing` = 0, `updated_at` = '2014-11-21 16:11:14' WHERE `assets`.`id` = 6362
(1.9ms) COMMIT
有没有办法通过ajax或其他方法使用它来自动显示完成的图像?我只是在寻找一种更用户友好的方法,而不是要求用户刷新页面或类似的东西?
非常感谢
最简单的方法是将页面设置为每隔几秒钟自动刷新一次,无论是否有更新,这都会使页面完全刷新:
<head>
<meta http-equiv="refresh" content="30">
</head>
如果你想要更精细一点,你可能想使用 ajax 轮询服务器,并在需要时使用 javascript 刷新页面(或页面的相关部分):
<script>
$(document).ready(function(){
setInterval(updateSeats,30000);
});
function updateSeats(){
$.ajax({
url: "/flights/<%= @flight.id %>/seats",
type: "GET",
}).done(function(data){
$("#seats").html(data);
});
}
</script>
您还可以考虑根据手头的用例实现更精细的类似推送的方案,例如长轮询。