为什么我的远程AJAX form_for以HTML而不是JS的形式提交?

时间:2011-06-27 20:33:40

标签: html ajax ruby-on-rails-3 jquery form-submit

我一直在将我的网站从Rails 2.x转换为Rails 3.0,到目前为止一直很好,除了我遇到form_for的问题。我知道要从remote_form_for切换到form_for, :remote => true,让新风格的AJAX非常适合普通的超链接。

但是,对于表单,我遇到了一个奇怪的问题,即表单是以HTML而不是JS的形式提交的,因此控制器会错误地处理这些表单。这就是我所拥有的。

<% form_for (AuthorSubscription.new), :remote => true, :id => "subscribe_form" do |f| %>
    <%= f.submit "Subscribe" %>
<% end %>

导致HTML

<form accept-charset="UTF-8" action="/author_subscriptions" class="new_author_subscription" data-remote="true" id="new_author_subscription" method="post">
  <div style="margin:0;padding:0;display:inline">
    <input name="utf8" type="hidden" value="&#x2713;" />
    <input name="authenticity_token" type="hidden" value="NxCF177nMDfL6QsYjesBUOUUJ9QdzKIdZYQjGAaGYmA=" />
  </div>        

  <input id="author_subscription_submit" name="commit" type="submit" value="Subscribe" /> 
</form>

您可以看到data-remote属性存在,并且一切似乎都很好。但是记录器正在向我展示

Started POST "/author_subscriptions" for 127.0.0.1 at 2011-06-27 16:21:29 -0400
  Processing by AuthorSubscriptionsController#create as HTML

对于我做错的任何想法?

2 个答案:

答案 0 :(得分:1)

我想,你应该在控制器中给出格式:

class AuthorSubscriptionsController < ApplicationController
    @@ajax_calls = [:your_ajax_method]
    respond_to :html, :except => @@ajax_calls
    respond_to :js, :only => @@ajax_calls, :layout => false

    def your_ajax_method
      etc...

答案 1 :(得分:1)

这发生在我身上,我发现如果我特意包括

<%= javascript_include_tag "jquery-1.6.2.min.js" %>
在application.html.erb中

,然后它会破坏我的远程表单。我建议你一次尝试删除一个js脚本,直到它再次运行。您还需要避免:

<%= javascript_include_tag :all %>

如果你已经安装了jQuery。