繁体   English   中英

提交AJAX后如何验证表格?

[英]How to validate form after AJAX submit?

我有一个通过AJAX提交的表格,因此服务器的预期响应格式为javascript。 问题是我无法像这样使验证工作。 通常我会这样做:

  # POST /cats
  # POST /cats.json
  def create
    @cat = Cat.new(cat_params)

    respond_to do |format|
      if @cat.save
        format.html { redirect_to @cat, notice: 'Cat was successfully created.' }
        format.json { render action: 'show', status: :created, location: @cat }
      else
        format.html { render action: 'new' }
        format.json { render json: @cat.errors, status: :unprocessable_entity }
      end
    end
  end 

但是现在我有这样的情况:

  # POST /cats
  # POST /cats.json
  def create
    @cat = Cat.new(cat_params)

    respond_to do |format|
      if @cat.save
        format.js { }
      else
        format.js { ????? }
      end
    end
  end

我创建了create.js.erb ,如果保存了新对象,它将执行我所需的一切,但是如果不保存对象,我不知道如何处理验证显示。 在我的表单内部,如果不使用AJAX,则可以正常使用:

  <% if @cat.errors.any? %>
    <div id="error_explanation">
      <ul>
      <% @cat.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
    </div>
  <% end %>

我能做什么? 我正在使用Rails 4。

unless @cat.persisted?unless @cat.persisted?您可以在create.js.erb再次呈现该表单unless @cat.persisted?

  1. 以另一部分的形式表示,例如“ _form.html.erb”。

  2. 如果您的表单位于ID为“ my_form_div”的div中,

那么create.js.erb将是

<%  if @cat.persisted? %>
  # code for success save
<% else %>
  $('#my_form_div').html('<%= escape_javascript(render('form')) %>');
<% end %>

这将再次呈现整个表格以及错误。 如果您不想再次呈现完整表单,则可以只对error div进行相同操作。

您可以在成功和失败两种情况下都渲染create.js.erb,并在create.js.erb文件中检查@ cat.errors.any是否? 如果是这样,您可以编写一些jquery并在html中注入错误,否则,请像以前一样处理成功方案。

示例代码来说明我的意思是:

def create
  @cat = Cat.new(cat_params)

  respond_to do |format|
   @error = @cat.save
   // or you can use if if you need more in success case to be done before rendering
   format.js {}
  end
end

在您的create.js.erb ::

<% if @error %>
  // loop over errors like your working code in the case of html request
<% else %>
  // success scenario
<% end %>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM