0

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

<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”方法然后愉快地处理文件并获得正确的结果(根据表单上的提交按钮)。如果我取消注释 '//alert('Hello')' 行,我会收到一个对话框,每 2 秒显示一次 Hello ... 正如预期的那样。

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

如果我点击链接

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

它调用服务器,得到响应并显示对话框,所以我假设路由、语法和命名都可以。

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

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

(注意这是从另一个问题开始的,但我认为它有足够的不同值得提出自己的问题。)

4

1 回答 1

2

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

试试这个:

  1. 尝试使用完整的 URL 而不是 Ajax.Request 的相对 URL。我在使用 Ajax.Request 的某些浏览器上遇到了相对 URL 的问题。

  2. 启用 Firebug 或 IE 开发工具栏。您应该能够查看对 progress_monitor 的调用是否有效。如果存在 java 脚本错误,那么您将使用这些工具清楚地看到错误。

于 2008-09-24T12:12:53.567 回答