【问题标题】:Rails form submission without refreshing the page?Rails 表单提交而不刷新页面?
【发布时间】:2015-07-09 18:29:50
【问题描述】:

使用 Play 框架,我可以创建一个用户可以填写和提交的表单,弹出一个 javascript 确认弹出窗口,该窗口会在一秒钟后消失,并且不会刷新页面。视频中显示了这一点:https://www.youtube.com/watch?v=sErFQiifHKI

但是,我似乎无法在 Rails 中复制这一点。我试过使用

<%= form_tag "/", :autocomplete => :off, :name => 'sentMessage', :remote => 'true', :id => 'contactForm', :authenticity_token => true, :method => 'post' do %>

在 routes.rb 中

post '/' => 'home#submit_contact'

最后,在 home_controller.rb 中

def submit_contact
    redirect_to '#contact'
end

它会弹出javascript确认弹出窗口,但它也会刷新页面,这不是我想要的!有没有办法在 Rails 中复制视频中显示的内容?

【问题讨论】:

    标签: javascript ruby-on-rails forms


    【解决方案1】:

    由于表单是远程表单,因此您的操作也应该使用 js / json 响应进行响应,而不是重定向到新操作

    您可以在控制器操作中添加这些行并定义相应的 js 模板(submit_contact.js.erb 文件)

    respond_to do |format|
      format.js
    end
    

    在这个 js 模板中,您可以编写您的 JavaScript 代码。

    【讨论】:

    • javascript 代码位于 form.js 中。如果我使用:def submit_contact respond_to do |form| form.js { render :js =&gt; "processForm(contactForm);" } end end,它会给我错误“ActionController::UnknownFormat”
    【解决方案2】:

    您可以阻止默认操作并发出异步请求。

    如果您可以使用 jQuery,那么类似于 this answer 的东西应该可以工作。否则,为纯js调整它应该不会太难。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 2017-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多