Javascript :remote=>;是否创建未知格式?

Javascript :remote=>;是否创建未知格式?,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,看看这个。我用以下语法创建了一个相当简单的表单: <%= form_for([@issue, @issue_order], :remote => true) do |f| %> 控制器通过执行一点逻辑,然后抛出一点类似以下内容来处理ajax请求: respond_to do |format| format.js end 处理此响应的AJAX在以下javascript中: $('#new_issue_order').on('ajax:success

看看这个。我用以下语法创建了一个相当简单的表单:

<%= form_for([@issue, @issue_order], :remote => true) do |f| %>
控制器通过执行一点逻辑,然后抛出一点类似以下内容来处理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);·
  }
我尝试在我的视图中创建一个新的.js.erb(与它所在的新页面相对应),但仍然会遇到相同的错误。我没有尝试将成功处理程序AJAX迁移到新的.js.erb代码中,因为出于业务原因,我更愿意将javascript处理保留在资产中的javascript文件中


如何获得无缝的AJAX响应?我以前做过,但你的回答总是让我困惑

将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
事件之后运行。

Hmm。即使这样做,我仍然会遇到未知的格式问题。我还想知道如何在不需要create.js.erb文件的情况下执行此操作。使用jQuery调用submit()按钮是否会改变传入的格式类型?是的,很可能是您的自定义脚本改变了这一点。除非您真的需要,否则不要使用自定义脚本。UJS是为简化这些案例而构建的。UJS使用remote true劫持表单提交,使用jQUery Ajax将请求发送到服务器,默认类型为“script
”,该类型的响应应为
:js`其余逻辑要求我通过执行以下代码提交表单:$(“#new#issue_order”)[0]。submit()。有没有办法确保格式仍然作为正确的AJAX调用传递,或者我需要将$(“#new_issue_order”)[0].submit()转换为传统的jQuery AJAX调用?即使使用脚本提交表单,比如
submit()
,也会触发submit事件,UJS可以听到。因此理论上不需要采取行动。如果您推出自己的Ajax调用,实际上不需要在此表单上使用remote true,您可以手动将Ajax
dataType
设置为脚本。
$('#new_issue_order').on('ajax:success', issueOrder.processOrder)...
$('#new_issue_order').css('background', 'green')