2008-09-24 81 views
0

我使用的网页以下,但不能从服务器获得响应on Rails应用程序的服务器端程序,而它的处理监控使用AJAX的XMLHttpRequest

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

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

如果我点击链接

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

它使调用服务器,获得一个响应并显示对话框,所以我假定路线和语法和命名是一切OK。我真的不知道为什么这是行不通的。是否因为通过URL调用同一个控制器中的2个方法?

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

(NB这从另一个question如下,但我认为这是十分不同,值得其自己的问题)。

回答

2

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

试试这个:

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

  2. 启用Firebug或IE开发工具栏。你应该能够看到对progress_monitor的调用是否有效。如果有一个Java脚本错误,那么你会看到使用这些工具清楚的错误。

+0

1.我试过,但URL使用GET,我需要使用POST的调用方法,所以我只是得到一个动作控制器异常 – 2008-09-24 12:50:11