我正在尝试从表单标签发送 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 => true 不是t 由 jquery ujs 正确找到或解释。我认为这是一种解决方法,而不是永久修复,所以如果有人知道我的原始代码有什么问题,我将不胜感激。
$('#testform').live('submit', function(e) {
$.rails.handleRemote( $(this) );
e.preventDefault();
});