无法从form_tag发送ajax请求

时间:2011-06-27 11:38:29

标签: ruby-on-rails ruby-on-rails-3 jquery ujs

我正在尝试从表单标记发送ajax请求,但是没有发送XHR请求。如果我从一个链接做同样的事情,一切都很完美。

以下是我可以从链接或表单发送请求的视图:

<div id="request_test">
   <%= link_to "test", explorer_test_path(:format => :js), :remote => true %>
   <%= form_tag explorer_test_path(:format => :js), :id => "testform", :remote => true, :method => :get do %>
      <%= submit_tag "Send test request"%>
   <% end %>
</div>
<div id="response_test"></div>

在我的控制器中,然后检查它是否是XHR请求,然后呈现响应ajax请求的javascript:

def test
  if request.xhr?
    logger.debug "xhr"
  else
    logger.debug "not xhr"
  end
  respond_to do |format|
    format.js
  end
end

我的test.js.erb非常简单:

$("#response_test").html("<b>hi</b>");

结果是,如果我点击链接,我会得到我正在寻找的行为,即response_test div读取“hi”。如果我提交表单,我只需将test.js.erb中的javascript写成字符串,服务器日志告诉我表单没有提交XHR请求。如果我在firebug中调试整个事情我得到相同的结果,链接发送一个ajax请求,提交的表单没有。在这两种情况下,我的控制台都告诉我服务器正在将请求作为JS处理,所以它不应该是任何数据类型的问题。

使用jquery UJS运行Rails 3.0.4。

感谢任何关于问题可能的提示,我已经尝试了很长一段时间,但由于我对Rails相对较新,我怀疑我遗漏了一些基本的东西。

更新:从(http://www.alfajango.com/blog/rails-jquery-ujs-now-interactive/)添加以下javascript修复了问题,这表明:remote =&gt; jquery ujs无法正确找到或解释我的表单标记上的true。我认为这是一个解决方法,而不是永久修复,所以如果有人知道我的原始代码有什么问题,我将非常感激。

$('#testform').live('submit', function(e) {
  $.rails.handleRemote( $(this) );
  e.preventDefault();
});

0 个答案:

没有答案