Обновление прогресса на стороне сервера в приложении Rails

StackOverflow https://stackoverflow.com/questions/120201

Вопрос

Я хочу загрузить, а затем обработать файл в приложении 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 вернет текущий прогресс в виде целого числа (% завершения), которое будет передано в код JavaScript setProgress (который обновит элемент на экране).

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

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

К этому вопросу есть дополнительный вопрос. Первоначально я обновил этот вопрос, но обновление было достаточно другим, чтобы гарантировать новый вопрос. здесь.

Это было полезно?

Решение

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

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

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

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

надеюсь, это поможет, потому что на самом деле я тоже столкнулся с той же проблемой =)

Другие советы

А :update В этом параметре должен быть указан только элемент div, который вы хотите обновить, а не Javascript, который вы хотите оценить.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top