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

<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秒......按预期的那样。

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

如果我点击链接

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

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

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

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

(注意这是继另一个问题,但我认为这是完全不同的,值得自己提出问题。)

有帮助吗?

解决方案

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

试试这个:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top