我正在輪詢在JavaScript中成功/失敗的長時間運行過程。如果進程失敗,我需要它導航到特定頁面並顯示flash['alert']
。我使用window.location.href
導航到新頁面,但我無法弄清楚如何從js創建flash['alert']
。作爲一個完整的臨時攻擊,我將一個錯誤消息作爲URL參數傳遞。然後在我的控制器new
操作中,如果存在錯誤,我檢查參數並創建flash['alert']
。我不喜歡這個解決方案,我假設有一個更乾淨的方法來做到這一點。從javascript創建flash消息/ jquery
function checkReportStatus() {
var report_id = $(".report").data("report-id");
$.get('/reports/' + report_id + '/check_report_status', function(report_status) {
if (report_status === 'completed') {
location.reload();
}
else if (report_status === 'error' || report_status === 'failed') {
window.location.href = "new?error=ERROR_MESSAGE";
}
else {
console.log("Report generation in progress...");
setTimeout(checkReportStatus, 3000);
}
});
}
您是否需要在JS中處理所有上述問題?爲什麼你不能輪詢一個Controller動作,它可以決定用消息渲染一個新頁面。 – Ari
'check_report_status'是我正在輪詢的控制器操作。它返回'report_status'。我試圖在動作中添加一個'redirect_to',但它似乎不起作用。也許是因爲它是一個GET請求?此外,這是一個delayed_job後臺任務,所以我認爲控制器操作正在從worker中調用,可能無法重定向? – mnort9