【问题标题】:Rails remote form not triggering ajax:success handlerRails 远程表单不触发 ajax:success 处理程序
【发布时间】:2014-05-10 15:26:54
【问题描述】:

这是我对表单的看法:

#popupBox
  %h1 Change Password
  %p Update password for user: #{@user.email}.
  #formHolder
    = simple_form_for @user, url: update_password_user_path, html: { class: 'remote-form' }, remote: true do |f|
      = f.input :password, required: true

      = f.button :submit, 'Update Password'

这是控制器代码:

def update_password
  @user = User.find(params[:id])
  if @user.update(update_password_params)
    render layout: false # This shows a nice "Completed" message for the user.
  else
    render action: 'edit_password', layout: false
  end
end

还有我的 javascript 代码:

$(document).ready ->
  $("form.remote-form").on("ajax:success", (e, data, status, xhr) ->
    console.log("Working")
    $("form.remote-form").append xhr.responseText
  ).on "ajax:error", (e, xhr, status, error) ->
    console.log("Not working")
    $("form.remote-form").append "<p>ERROR</p>"

当我提交表单时,会触发一个 AJAX 帖子(在我的开发工具中可以看到),但没有触发任何 console.log 调用。

如何检测表单何时通过 AJAX 提交并将控制器代码的结果放在 dom 中的表单位置?

【问题讨论】:

  • 你必须尝试这个ajax:error事件来捕捉错误,也许你会在那里找到一些线索。
  • @ParitoshPiplewar:抱歉,我不确定为什么粘贴的代码会被破坏。我用 actual 代码更新了问题。

标签: jquery ruby-on-rails ajax forms


【解决方案1】:

在控制器中添加json响应:

  def update_password
    @user = User.find(params[:id])

    respond_to do |format|
      if @user.update(update_password_params)
        format.json { render json: @user, status: :updated }
      else
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end

【讨论】:

  • 但是我不想返回 JSON,我想返回 HTML,然后将 append'd 到 html dom。
  • 您还可以将 json 附加到您想要的任何输入,但发送较少的数据,例如:gist.github.com/itsNikolay/760e6116b5bbe2447f4b 希望它有所帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多