使用ajax提交表单后显示flash消息

Posted

技术标签:

【中文标题】使用ajax提交表单后显示flash消息【英文标题】:Show flash message after submitting form using ajax 【发布时间】:2015-08-28 20:43:27 【问题描述】:

我正在使用 Rails 构建我的第一个应用程序,并且我还尝试在其上添加一些 ajax 功能。为了创建用户,我的根 url 中有一个注册表单,但我找不到在创建用户后显示成功消息的方法。我可以正确看到 json 响应,但看不到 flash 消息。我的代码中是否缺少某些内容?

# Controller

def create
  @user = User.new(user_params(CREATE_PARAMS))

  respond_to do |format|
    if @user.save
      @user.send_activation_email
      format.html  flash[:info] = "Success!!"
                    redirect_to root_url
      
      format.json  render json: @user, status: :created, location: @user 
    else
      format.html  render "new" 
      format.json  render json: @user.errors, status: :unprocessable_entity 
    end
  end
end

# application.html.erb

<body>
  <div class="container">
    <div class="message-notification">
      <%= render 'shared/alert_messages' %>
    </div>
    <%= yield %>
  </div>
</body>

# shared/_alert_messages.html.erb

<% flash.each do |message_type, message| %>
  <%= content_tag(:div, message, class: "alert-message alert-message-#    message_type") %>
<% end %>

# Handling errors users.coffee
$(document).on "ajax:error", "form#new_user", (event, data, status, xhr) ->
  $("form#new_user").render_form_errors "user", data.responseJSON

$.fn.render_form_errors = (model_name, errors) ->
  form = this
  this.clear_form_errors()

  $.each errors, (field, messages) ->
    input = $('input[name="' + model_name + '[' + field + ']"]');
    input.closest(".form-group").addClass("has-error")
    input.parents(".form-group").append('<span class="help-block">'  + 
      $.map(messages, (m) -> m.charAt(0).toUpperCase() + 
      m.slice(1)).join("<br />") + "</span>")

$.fn.clear_form_errors = () ->
  this.find(".form-group").removeClass("has-error")
  this.find("span.help-block").remove()

【问题讨论】:

***.com/questions/23967390/… 的副本。 Net net 是你不能有一个“真实的”闪存消息,因为你没有发出服务器请求,但你可以模拟一个。 这里的问题是我没有被重定向,这就是为什么我看不到我的闪存消息,我不知道为什么 我恭敬地提出问题是您无法使用 Ajax 请求呈现 Flash 消息。 【参考方案1】:

我认为您必须将 flash[:info] 放在 json 块中,例如

format.json  flash[:info] = "Success!!" 

而不是将其放在 format.html 中

【讨论】:

以上是关于使用ajax提交表单后显示flash消息的主要内容,如果未能解决你的问题,请参考以下文章

在设计中使用ajax表单时处理错误和flash消息

使用php提交ajax表单

jQuery在使用ajax验证后提交表单

Ajax 表单提交响应

使用 Jquery 验证插件提交 Ajax 表单不起作用

使用 ajax 时,Flask flash 消息不再起作用