在JavaScript中模拟Rails表单提交

Simulating Rails form submit in JavaScript

本文关键字:Rails 表单提交 模拟 JavaScript      更新时间:2023-09-26

我有一个非常标准的Rails-HAML新对象表单,它做一些常见的事情,并以结尾

= f.submit "Add scenario"

这非常有效,scenarios_controller.rb也是一个简单的

def create
  ...create scenario...
  redirect_to scenarios_path
end

然而,我也开发了一个向导类型的表单,需要在按下按钮时执行一些JavaScript:

= f.submit "Add scenario", :onclick => "return validateForm()"

在我的CoffeeScript中,我收集了所有信息,最后得到:

$.post(
  url
  data
  (data, textStatus, jqXHR) ->
    # How do I follow the redirect?
return false

我的urldata是正确的,因为上面的控制器工作正常并创建了我的对象,但我的页面没有重定向到scenarios_path。我想我应该对发布的结果做点什么,但在网上搜索我找不到什么,检查Chrome调试器中返回的字段也没有任何建议。我看到的唯一建议是使用data.redirect,但这样的字段并不存在,尽管jqXHR.responseText似乎包含我要重定向到的页面。

我会使用responsd_to块来区别对待对Scenario#create的HTML调用和对Scenario#create的JS调用。

scenarios_controller.rb文件中:

def create
  # create your object
  respond_to do |format|
    format.html do
      redirect_to scenarios_path
    end
    format.js
  end
end

views/layouts/scenarios/create.js.erb中,然后放一些类似的东西:

window.location.replace("<%= scenarios_path %>");

当使用JS调用Scenario#create时,create.js.erb文件将被渲染并强制重定向。当您使用HTML调用Scenario#create时,redirect_to调用照常进行。