我正在轮询在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