嘿,伙计们,我正在尝试通过提交一个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作业,并执行一些render :update魔术:
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”操作,该操作检查作业的进度并适当地呈现,然后在报告作业完成时停止检查。有什么建议吗?
发布于 2010-03-11 06:58:51
好吧,我找到了一个解决方案。我不得不使用一些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' }) %>;
}
}
//-->然后使用主体onload="inits()“启动脚本。传递命令以执行工作程序的控制器应将checkstatus的值指定为1:
render :update do |page|
page.assign 'checkstatus', 1
end最后,在状态检查方法中,将其设置为在完成后重置该变量,以转到定期检查:
render :update do |page|
page.assign 'checkstatus', 0
page.replace_html 'successdiv', 'SUCCESS!'
endhttps://stackoverflow.com/questions/2375465
复制相似问题