Мониторинг серверного процесса в приложении Rails с помощью AJAX XMLHttpRequest

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

Вопрос

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

<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')', я получаю диалоговое окно с приветствием каждые 2 секунды...как и ожидалось.

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

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

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

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

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

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

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

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

Решение

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

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

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

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

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