javascript - AJAX提交后如何验证表单?

标签 javascript jquery ruby-on-rails ajax jquery-file-upload

我有一个通过 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。

最佳答案

create.js.erb 中,您可以再次渲染表单除非@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 %>

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

关于javascript - AJAX提交后如何验证表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26694151/

相关文章:

javascript - 如何调试使浏览器挂起的 JavaScript?

jQuery mouseleave 来自子元素

javascript - DataTables.js 未加载

javascript - 从多个数组构建自定义 JSON 数组

javascript - WebSockets : useful for reducing overhead?

javascript - 如何显示 React JavaScript 文件中的内容,或者更确切地说是要由 React 解释的文件

javascript - Bootstrap 模态不会在移动设备上触发

javascript - 当我调整浏览器大小时,bxslider slider 图像不会调整大小

javascript - 未找到传单标记生产环境

ruby-on-rails - 动态计划在 resque fork 新流程时丢失