Получить результаты работы BackgrounDRB и страницу обновления - PullRequest
1 голос
/ 04 марта 2010

Эй, ребята, я пытаюсь запустить процесс, отправив форму 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 %>

Затем действие «отправить» создает новое задание 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 голосов
/ 11 марта 2010

Хорошо, я нашел решение. Мне пришлось использовать немного javascript, чтобы проверить, установлена ​​ли переменная true каждые 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 ()" для запуска скрипта. Контроллер, которому вы передаете команду для выполнения работника, должен присвоить 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...