使用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脚本错误,则使用这些工具将清楚地看到该错误。