2008-09-23 6 views
4

Я хочу загрузить и обработать файл в приложении Ruby on Rails. Загрузка файла обычно довольно короткая, но обработка на стороне сервера может занять некоторое время (более 20 секунд), поэтому я хочу дать пользователю какой-то индикатор - что-то лучше, чем бессмысленный экран «обработка ...».Обновление прогресса на стороне сервера в приложении Rails

Я пытаюсь использовать следующий код в представлении

<%= periodically_call_remote(:url => {:action => 'progress_monitor', :controller => 'files'}, 
       :frequency => '5', 
       :update => "setProgress('progressBar','5')" 
       ) %> 

Содержание: параметр обновления, в JavaScript Я хочу, чтобы запустить каждые 5 секунд

и следующий код в контроллер файлы

def progress_monitor 
    render :text => 'whatever' 
end 

в конце концов метод progress_monitor возвращает текущий прогресс как целое число (%) и полная, которая будет передана в «» setProgress javascript code (который будет обновлять элемент на экране)

Однако я изо всех сил пытаюсь получить правильный ответ с сервера, который затем может быть передан в javascript.

Может ли кто-нибудь помочь, или я приближаюсь к этому неправильно?

Существует следующий вопрос к этому вопросу, я изначально обновил этот вопрос, но обновление было достаточно различным, чтобы задать новый вопрос, here.

ответ

2

периодически_call_remote() обновляет div. Он не будет вызывать вашу функцию javascript. Я не гуру javascript, но чтобы решить вашу проблему, вы должны сделать свой собственный вызов xmlhttp. Если бы я тебя, я хотел бы использовать Ajax запрос прототипа

http://www.prototypejs.org/api/ajax/request

и использовать SetTimeout в JavaScript или setinterval, чтобы сделать периодический опрос

http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

надеюсь, что это помогает соз на самом деле я столкнулся тот же prb too =)

0

Опция :update должна отображать только список, который вы хотите обновить, а НЕ иметь Javascript, который вы хотите оценить.

Помощники Rails по-прежнему очень хороши для этой ситуации, нет необходимости писать много пользовательских JS. Если вы хотите выполнить JS по возвращении, простым способом было бы создать шаблон RJS. Если вы хотите сделать это с помощью чистого HTML, просто визуализируйте представление (или частичное или верните непосредственно из метода render с HTML-индикатором строки выполнения) и поместите div индикатора выполнения в опции :update метода periodically_call_remote.

 Смежные вопросы

  • Нет связанных вопросов^_^