@Alex荒神 @Sergio Tulentsev
這是一個有點難看,但它的工作原理(希望我在拷貝和改變名稱,以更通用的一個東西沒有搞砸任何東西)。
配置/ routes.rb中:
get 'loading_screen/:id' , to: 'model_name#loading_screen' , as: 'loading_screen'
match 'loading_status' , to: 'model_name#loading_status' , as: 'loading_status' , :via => [:get,:post]
在MODEL_NAME控制器:
def loading_screen
@model_name = ModelName.find_by(id: params.try(:fetch,:id,nil))
@id = @model_name.try(:id)
end
def loading_status
@model_name = ModelName.find_by(id: params.try(:fetch,:id,nil)
@id = @model_name.try(:id)
@json = { status: @model_name.try(:status) , id: @id }.to_json
respond_to do |format|
format.js do
render layout: false
end
end
end
瀏覽loading_screen.html.erb:
<script>
function checkStatus(id) {
$.ajax({
url: '/loading_status',
data: { id: id } ,
dataType: 'json',
success: function(res) {
var status = res.status;
var id = res.id;
console.log("json = " + JSON.stringify(res,null,2));
if (status == "Done") {
window.location = "/path_to_view_completed_results/" + id;
myStopFunction();
} else if (count > 30) {
myStopFunction();
}
}
});
}
var id = <%= @id %> ;
var count = 0;
var myInterval = setInterval(function(){ checkStatus(id) }, 1000);
function myStopFunction() { clearInterval(myInterval); }
</script>
在loading_status.js.erb:
<%= @json.html_safe %>
「check_job_statuses#秀」 - 沒了!更好的「job_statuses#show」:) –
這就是我認爲,一旦實施,我會發布我是如何做到的,並將答案標記爲已接受。謝謝。 (我希望有更多'Rails的方式'來做到這一點,哦) –
@SergioTulentsev你完全正確。只是想提出一個服務控制器,它應該使用'create'方法 - 「check_job_statuses#create」 –