Обновление хода сервера на Rails-приложении

javascript ruby-on-rails ajax xmlhttprequest

1734 просмотра

2 ответа

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

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

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

Содержимое параметра: update - это javascript, который я хочу запускать каждые 5 секунд.

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

def progress_monitor
  render :text => 'whatever'
end

В конце концов метод progress_monitor вернет текущий прогресс как целое число (% complete) и будет передано в код JavaScript setProgress (который будет обновлять элемент на экране)

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

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

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

Автор: Matt Haughton Источник Размещён: 17.05.2019 03:37

Ответы (2)


2 плюса

Решение

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

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

и использовать настройку JavaScript или setinterval для периодического опроса

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

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

Автор: liangzan Размещён: 23.09.2008 10:56

0 плюса

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

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

Автор: Ian Terrell Размещён: 23.09.2008 02:06
Вопросы из категории :
32x32