嘿伙计们,我试图通过提交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'操作,检查作业的进度并适当呈现,然后停止检查作业报告完成的时间。有什么建议吗?
答案 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