当前位置: 首页 > 面试题库 >

Rails通过ajax提交表单并更新视图

黄沈浪
2023-03-14
问题内容

我想通过ajax更新表单提交而无需重新加载页面并根据它更新视图。我尝试了不同的方法,但作为Rails的新手失败了。

这是情况。

模态

def new
    @new_entry = current_user.notes.build
    @words = current_user.notes
    @notes_false_list = current_user.notes.where(known: false).order("title").group_by { |note| note.title[0] }
    @notes_true_list = current_user.notes.where(known: true).order("title").group_by { |note| note.title[0] }
  end

在查看表单代码。

<%= form_for @new_entry, :html => {:class => 'home-form without-entry clearfix'}  do |f| %>
      <%= f.text_field :title, placeholder: 'Squirrel', autofocus: true, class: 'title-field pull-left' %>
      <%= f.submit '', class: 'btn home-add without-entry' %>
  <% end %>

创建动作

def create
    @new_note = current_user.notes.build(new_note_params)
    if @new_note.save
      @notes_list = current_user.notes.count
      unless @new_note.user.any_entry
        @new_note.user.toggle!(:any_entry) if @notes_list >= 50
        redirect_to root_url
      end
    else
      redirect_to root_url
    end
  end

最后我认为我想改变

<p class="instructions count-instruction text-center">
      <%= @words.count %>
    </p>

花了很多时间用AJAX进行更新,但每次都失败。有什么需要帮助的吗?提前致谢。


问题答案:

您的代码不错,但是对于 ajax来说

  1. 您需要添加remote=true表单中。

<%= form_for(@image,:html=>{:id=>"your_form_id",:multipart => true,:remote=>true}) do |f |%>

  1. 此外,在服务器端, 您需要在其中创建一个js.erb 文件, views/users/show_updated_view.js.erb以将其作为js调用 而非 NOT html调用来回复浏览器,因此需要向用户显示表单提交后发生了某些事情(成功/错误)(如果其users_controller),

因此,在您的操作中,您需要执行以下操作:

        respond_to do |format|  
            format.js { render 'users/show_updated_view'}
        end
  1. 在中show_updated_view.js.erb,您应该通过隐藏整个表单/重置表单或将表单替换为新的div(表示数据已更新)来更新视图,以使用户知道该视图已更新或表单已成功提交。任何直观的方法虽然有很多方法:)。

//这里我用div替换了整个表格

$("#your_form_id").html("<div><p>You have submitted the form successfully.</p></div>");

视图的名称可以是任何名称,但是您需要兼顾成功和失败。



 类似资料:
  • 问题内容: 我想知道如何通过Ajax(使用原型框架)提交表单,并在“结果” div中显示服务器响应。HTML看起来像这样: 我尝试将javascript函数(使用Ajax.Updater)附加到“ onsubmit”(在表单上)和“ onclick”(在输入上),但是在函数结束后,表单仍然是“ non-Ajax”提交的(因此整个页面被结果替换)。 问题答案: 查看和处理Prototype API的

  • 问题内容: 所以假设我有3种形式 每个表单都有自己的提交按钮 现在假设我有另一种形式 其唯一的功能是同时提交所有其他3种形式。…现在这里是约束: 当submitAll提交后,它必须使用Ajax这样做,并且最好通过POST将输入的数据从所有其他3种形式转发到processor.php processor.php需要能够区分输入到哪种形式…然后分别处理每种形式的输入 我的问题是..什么是使proces

  • 问题内容: 我正在使用以下jQuery代码通过AJAX提交表单。 代码完美运行,没有ajax。 但是,如果我通过Ajax加载表单,则无法正常工作。 我认为这是因为JavaScript加载后通过ajax加载了表单。 有什么办法吗? 问题答案: 如果使用jQuery 1.7+,则可以尝试使用.on()委托事件并绑定到具有相同类的所有将来的表单。尝试查找没有动态插入的最接近的父代,而不是$(docume

  • 问题内容: 假设我有这种形式: 我目前正在使用此脚本提交表单,但这意味着需要刷新: 我想要做的是在 不 更改 页面的情况下 发送选择更改时的表单。我知道我必须使用AJAX来执行此操作,但是我无法确切地知道如何实现它。 您能指导我如何执行此操作吗? 谢谢你的帮助。 编辑: 考虑了评论之后,我得到了以下代码: HTML: JS: PHP的: 问题答案: 使跨浏览器事件和AJAX请求正常工作并非易事。我

  • 问题内容: 我想通过jquery ajax提交此表单,这是我所做的,并且不起作用。即表格提交与页面刷新,我没有看到响应,即在同一页面上打印数组。 的HTML PHP(submit.php) 问题答案: 使用此方法-出现一些语法错误,必须提交事件

  • 问题内容: 感谢balexandre和rtiq,我的工作流程已经全部解决。我的.ashx文件正在被调用,所以我知道部分代码正在运行,并且警告我错误。当我跟踪.NET时,通过context.Request[“ email”]和context.Request [“ optin”]引入的变量为NULL。 我知道有什么问题,但看不到。我重新编辑了这篇文章,以获取最新的代码。 HEAD中的jQuery HT