使用AJAX XMLHttpRequest监视Rails应用程序上的服务器端进程

时间:2020-03-06 14:38:56  来源:igfitidea点击:

我在网页中使用以下内容,但在处理过程中无法从服务器获得响应

<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);" %>

然后,fmfiles_controller.rb中的'create'方法愉快地处理文件并获得正确的结果(按照表单上的Submit按钮)。如果我取消注释'// alert('Hello')'行,则会弹出一个对话框,每隔2秒钟显示一次Hello ...符合预期。

但是,服务器永远不会在"文件"中记录对" progress_monitor"方法的任何调用,甚至不会失败。

如果我点击链接

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

它调用服务器,获取响应并显示对话框,因此我假设路由,语法和命名都可以。

我真的不知道为什么这行不通。是否因为通过URL调用了同一控制器中的2个方法?

我在OS X 10.5.5的开发环境中使用Rails 2.1.0,并使用Safari 3.1.2

(注:这是从另一个问题开始的,但我认为这完全值得提出自己的问题。)

解决方案

如果我们没有在日志文件中看到调用" progress_monitor"的消息,则可能永远不会发送该请求。

试试这个:

  • 尝试使用完整URL而不是Ajax.Request的相对URL。我在使用Ajax.Request的某些浏览器中遇到了相对URL的问题。
  • 启用Firebug或者IE开发人员工具栏。我们应该能够看到对progress_monitor的调用是否起作用。如果出现Java脚本错误,则使用这些工具将清楚地看到该错误。