我已经击败了我的头,直到它变得柔软。是时候咨询专家了!
我的应用程序产生了许多Delayed :: Jobs。我想向用户提供有关这些作业运行状态的可视反馈。假设我有一份工作< ActiveRecord :: Base模型,具有名称,状态(IDLE,QUEUED,RUNNING,SUCCEEDED,FAILED)和状态字符串,并且状态和状态通常是异步更新的。
还假设视图模板带有<div id='job-status'></div>
元素作为显示作业状态的位置。哦,还假设我正在使用Rails3和jQuery。
为了获得最大的可移植性,我想使用javascript启动的客户端轮询。我知道一些javascript(jQuery方法,setTimeout等),但我没有找到Rails和jQuery函数的混合以合理的方式做到这一点。
简洁地说,如果您有一个名称,状态和状态的ActiveRecord作业模型,您将在CONTROL / jobs_controller.rb中放置什么以及将实现哪些views / jobs /?服务器是否生成html或JSON或XML来更新#job-status div? (我意识到这是一个广泛的问题 - 我不期待一个完整的答案,只是足够的指针将它拼凑在一起。)
感谢。
答案 0 :(得分:2)
你应该通过jquery对你控制器上发送回数据的json启用方法进行ajax调用。
使用该数据,您可以通过$("#somediv").html(ajax_result)
这是一个真实的样本:
var linkHtml = $("#searchNumber").html();
$("#message").empty();
var aurl = "/Prospect/SearchNumberAuth?number=" + $("#MSISDN").val() ;
$.ajax({
dataType: 'json',
type: "GET",
url: aurl,
async: false,
contentType: "application/json; charset=utf-8",
beforeSend: function() {
$("#holdNumber").fadeOut("slow");
$("#searchNumber").empty().html("<image src='../../Content/images/jquery-ui/load-indicator.gif'/>");
},
success: function(response) {
$("#message").fadeIn(1500).html(function() {
if (response[0] == "Exist") {
$("#holdNumber").fadeIn("slow");
$("#MSISDN").attr("readonly", "readonly");
$("#searchNumber").fadeOut("slow");
return existMsg;
} else if (response[0] == "Sold") {
$("#searchNumber").empty().html(linkHtml).fadeIn("slow");
return soldMsg;
} else if (response[0] == "Hold") {
$("#searchNumber").empty().html(linkHtml).fadeIn("slow");
return holdMsg;
} else
$("#searchNumber").empty().html(linkHtml).fadeIn("slow");
return notExistsMsg;
});
},
error: function(jqXHR, textStatus, errorThrown) {
$("#searchNumber").empty().html(linkHtml).fadeIn("slow");
},
complete: function() {
}
});
这是控制器类中的服务器端代码,可以轻松移植到Rails:
public JsonResult SearchNumberAuth(long number)
{
return this._searchNumber(number);
}
在_searchNumebr
方法中,我将返回JsonResult
。
您可以在website中查看更多详细信息,尽管它位于波斯语中,但您可以在ProspectView.js中看到FireBug的js代码,在第二个标签中看到结果。