模拟Rails表单在JavaScript中提交

时间:2013-12-12 05:10:48

标签: javascript jquery ruby-on-rails

我有一个非常标准的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似乎包含我要重定向到的页面。

1 个答案:

答案 0 :(得分:2)

我使用respond_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调用将照常进行。