Мониторинг серверного процесса в приложении Rails с помощью AJAX XMLHttpRequest
-
02-07-2019 - |
Вопрос
Я использую следующее на веб-странице, но не могу получить ответ от сервера во время его обработки
<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', то вполне возможно, что запрос никогда не отправляется.
Попробуй это:
Попробуйте использовать полный URL-адрес вместо относительного URL-адреса для Ajax.Запрос.У меня были проблемы с относительными URL-адресами в некоторых браузерах с помощью Ajax.Запрос.
Включите Firebug или панель инструментов разработчика IE.Вы должны быть в состоянии увидеть, работает ли вызов progress_monitor или нет.Если произошла ошибка java script, то вы ясно увидите ошибку, используя эти инструменты.