Ajax函数无法从rails表单中保存数据

时间:2011-07-18 21:05:11

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

当我点击保存按钮时,表单未提交,我的代码可能出错?请提前感谢。我使用的是Rails 3.1

FORM

 <%=form_for :user ,:remote=>true do |f|%>
 <%= f.label :school %>
 <%= f.text_field :school,:size=>"45",:class=>"round",:id=>"school" %>
 <%= f.submit "save and continue",{:class=>"savebutton" }%>
 <%end%>

JQUERY(的application.js)

$(".savebutton").bind('click',function() {  
  $('form').submit(function() { 
    var formToSubmit = $(this).serialize();
    $.ajax({
      url: $(this).attr('action'), 
      data: formToSubmit,
      dataType: "JSON" 
     });
    return false; 
  });
});

CONTROLLER

class SchoolController < ApplicationController
  respond_to :json

  def create
    @school = current_user.schools.build(params[:school].merge(:user => current_user))

    @school = current_user.school.build(params[:school].merge(:user => current_user))

    if @school.save
      respond_with @school
    else
      respond_with @school.errors, :status => :unprocessable_entity
    end
  end
end

2 个答案:

答案 0 :(得分:1)

如果您想使用ajax,则需要在:remote => true中添加form_for,如果您的表单有{{1},则无需显式调用$.ajax。 }。阅读this以获取有关如何在Rails应用程序中使用AJAX的优秀教程。

答案 1 :(得分:1)

@ vinceh的回答肯定是你应该这样做的方式,你仍然可以 以老式的方式做到这一点。

.submit()方法不会提交表单(您可能认为它会这样做),而是将表单的submit事件绑定到您提供的方法。所以现在,当你点击提交按钮时,它所做的只是设置回调,但是你return false,所以表格实际上从未提交过。

你应该能够摆脱周围的$('.savebutton).click(...)处理程序,并将$('form').submit(...)处理程序直接放在你的javascript中,这样当页面加载时,立即注册回调。您无需担心具体处理.savebutton点击。

此外,您的Ajax请求可能需要type: 'POST'type: 'PUT',因为$.ajax默认为GET请求。