1

我正在尝试从表单标签发送 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();
});
4

0 回答 0