监控使用AJAX的XMLHttpRequest
问题描述:
我使用的网页以下,但不能从服务器获得响应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如下,但我认为这是十分不同,值得其自己的问题)。
答
如果您在日志文件中没有看到“progress_monitor”调用的消息,那么请求永远不会被发送。
试试这个:
尝试使用完整的URL,而不是用于Ajax.Request的相对URL。在使用Ajax.Request的某些浏览器上,我遇到了相关URL的问题。
启用Firebug或IE开发工具栏。你应该能够看到对progress_monitor的调用是否有效。如果有一个Java脚本错误,那么你会看到使用这些工具清楚的错误。
1.我试过,但URL使用GET,我需要使用POST的调用方法,所以我只是得到一个动作控制器异常 – 2008-09-24 12:50:11