Мониторинг процесса на стороне сервера в приложении Rails с использованием AJAX XMLHttpRequest - PullRequest
0 голосов
/ 24 сентября 2008

Я использую следующее на веб-странице, но не могу получить ответ от сервера во время его обработки

<script type="text/javascript">
<!--
   function updateProgress() {
      //alert('Hello');
      new Ajax.Request('/fmfiles/progress_monitor', {
         parameters: 'authenticity_token=' + encodeURIComponent(AUTH_TOKEN),
         onSuccess: function(response) {
            alert(response.responseText);
            fillProgress('progressBar',response.responseText);
         }
      });
   }
//-->
</script>

<% form_for( :fmfile, :url => '/fmfiles', :html => { :method => :post, :name => 'Form_Import', :enctype => 'multipart/form-data' } ) do |f| %>
...
<%= f.file_field :document, :accept => 'text/xml', :name => 'fmfile_document' %>
<%= submit_tag 'Import', :onClick => "setInterval('updateProgress()', 2000);" %>

Затем метод 'create' в fmfiles_controller.rb успешно обрабатывает файл и получает правильные результаты (согласно кнопке отправки в форме). Если я раскомментирую строку '// alert (' Hello ')', я получаю диалоговое окно с сообщением Hello каждые 2 секунды ... как и ожидалось.

Однако сервер никогда не регистрирует ни одного вызова метода 'progress_monitor' в 'файлах', даже неудачной попытки.

Если я нажму на ссылку

<a href="#" onclick="updateProgress();">Run</a>

он звонит на сервер, получает ответ и отображает диалоговое окно, поэтому я предполагаю, что с маршрутами, синтаксисом и именами все в порядке.

Я действительно не знаю, почему это не работает. Это потому, что 2 метода в одном контроллере вызываются через URL?

Я использую Rails 2.1.0 в среде разработки на OS X 10.5.5 и использую Safari 3.1.2

(N.B. Это следует из другого вопроса , но я думаю, что он достаточно отличается, чтобы заслужить свой вопрос.)

1 Ответ

2 голосов
/ 24 сентября 2008

Если вы не видите сообщений в вашем файле журнала для вызова 'progress_monitor', то возможно, что запрос никогда не отправляется.

Попробуйте это:

  1. Попробуйте использовать полный URL-адрес вместо относительного URL-адреса для Ajax.Request. У меня были проблемы с относительными URL-адресами в некоторых браузерах с Ajax.Request.

  2. Включить Firebug или панель инструментов разработчика IE. Вы должны видеть, работает ли вызов progress_monitor или нет. Если есть ошибка java-скрипта, то вы четко увидите ошибку, используя эти инструменты.

...