获取BackgrounDRB作业和更新页面的结果

时间:2010-03-03 22:22:45

标签: ruby-on-rails ajax

嘿伙计们,我试图通过提交AJAX表单来运行一个过程:

<% form_remote_tag :url => {:controller => 'sender', :action => 'send'} do %>
<input id="messsageinput" type="text" size="44" name="command"/>
<%= submit_tag('Send', :id => 'button') %>
<% end %>

然后,'send'操作会创建一个新的BackgrounDRB作业并执行一些渲染:update magic:

MiddleMan.worker(:transmit_worker).async_transmit(:arg => {:linkes => linkes, :command => params[:command], :userid => current_user.id}, :job_key => current_user.id)
    render :update do |page|
        page.insert_html :bottom, 'ajaxholder', :partial => 'transmit'
        page[:cominput].clear
    end

我被卡住的部分是我试图以某种方式让页面检查'getstatus'操作,检查作业的进度并适当呈现,然后停止检查作业报告完成的时间。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

好吧,我找到了解决方案。我不得不使用一些javascript来检查变量是否每2秒设置为真,如果它运行的是AJAX更新程序(有点像期刊但有变量开/关开关:

var updateInterval = 2000;
var timer;
var checkstatus = 0;
function inits()
{
<%= remote_function(:update => "feed",
      :url => { :controller => 'feed', :action => 'getfeed' }) %>;
timer = setInterval('checkel()', updateInterval);
}
function checkel(){
if(checkstatus=="1")
{
<%= remote_function(:url => { :controller => 'transmit', :action => 'getstatus' }) %>;
}
}
//-->

然后使用body onload =“inits()”来启动脚本。传递命令以执行worker的控制器应为checkstatus分配值1:

render :update do |page|
page.assign 'checkstatus', 1
end

最后,在状态检查方法中,将其设置为在完成时重置变量以转动定期检查:

render :update do |page|
page.assign 'checkstatus', 0
page.replace_html 'successdiv', 'SUCCESS!'
end