:remote =>真的创建未知格式?

时间:2013-11-11 04:57:27

标签: javascript jquery ruby-on-rails ajax

检查一下。我有一个相当简单的表单,使用以下语法创建:

<%= form_for([@issue, @issue_order], :remote => true) do |f| %>

由于页面上的逻辑,表单实际上是通过javascript调用的,如下所示:

$('#new_issue_order')[0].submit()

控制器通过执行一些逻辑来处理ajax请求,然后抛出一些这样的东西:

    respond_to do |format|
      format.js
    end

处理此响应的AJAX位于以下javascript:

$('#new_issue_order').on('ajax:success', issueOrder.processOrder)
..........
  processOrder: function(e, data, status, xhr) {
      $('.sign-up-errors').empty();
      errors = xhr.getResponseHeader('X-Flash-Error').split(',');
      for (i=0; i < errors.length; i++) {
        $('.errors').append($('<p>' + errors[i] + '</p>'));
      }
      setTimeout(function() {
        $('.errors').empty();
      }, 3500);·
  }

我认为这会允许它响应远程请求,但我得到的是以下错误:

ActionController::UnknownFormat

我尝试在我的视图中创建一个new.js.erb(与它所在的新页面对应),但我仍然遇到同样的错误。我没有尝试将我的成功处理程序AJAX迁移到new.js.erb代码,因为出于商业原因,我宁愿将javascript处理保存在我的资产的javascript文件中。

如何获得无缝的AJAX响应?我以前做过,但是respond_to一直困惑我。

1 个答案:

答案 0 :(得分:3)

将js响应模板设置为new.js.erb不正确。

表单本身在new.html.erb模板中,按惯例猜测。因此,表单的操作应该指向#create

为了正确回复此表单的提交,您需要创建一个js模板create.js.erb,并在#create操作中回复js。

此外,在大多数情况下,您不需要在资产js中手动设置Ajax响应,如

$('#new_issue_order').on('ajax:success', issueOrder.processOrder)...

相反,您可以在create.js.erb内完成。例如

$('#new_issue_order').css('background', 'green')

此脚本将在ajax:success事件后运行。