提交带有查询的rails远程真实表单,它仍然重定向/给出406

时间:2013-11-28 16:49:16

标签: jquery ruby-on-rails ajax ruby-on-rails-3

我花了太多时间在这上面,试图弄清楚它为什么不起作用。我已经尝试了两种方法都有缺陷。这让我疯了。这是我的代码。
方法1

表格

<%= form_for @order, remote: true do |f| %> 
...
<% end %><br>

Js

$('#new_order').submit(function() {
    $('input[type=submit]').attr('disabled', true);
      //Some validations
      if (validation successful) {
        $('#new_order')[0].submit();
        return false;
      } else {
        return true;
      }

});

控制器

def create
   #if @order.save, the usual
   respond_to do |format|
      format.js
   end
end

现在,如果有一个format.html,那么它将遵循html重定向,如果没有,则会抛出406错误。它没有javascript正常工作但它仍然在标题中说html。

方法2
表格

<%= form_for @order, remote: true do |f| %> 
...
<% end %><br>

Js

$('#new_order').submit(function() {
    $('input[type=submit]').attr('disabled', true);
      //Some validations
      var form = $(this);
      if (validation successful) {
        $.ajax({
      type: "POST",
      url: form.attr('action'),
      dataType: "json",
      data: form.serialize(),
      complete: function(js_data){
        alert(js_data);
      }  
  });
        return false;
      } else {
        return true;
      }

});

控制器

def create
   #if @order.save, the usual
   respond_to do |format|
      format.json { render json: @order }
   end
end

现在这个工作得更好,没有重定向或406错误但它忽略了完整或成功块中的所有内容。因此,即使成功创建订单,页面也保持不变。

Nb:此页面是子域名页面。例如blog1.mysite.com,但它没有js。 我理想的方法是第一种方法。反正是否强制提交响应format.js?
感谢。

1 个答案:

答案 0 :(得分:2)

您可以手动强制请求格式响应js 在控制器中添加一个前置过滤器。

before_filter :default_format_js, only: :create

def default_format_js
    reponse.headers['content--type'] = 'text/javascript'
    request.format = 'js'
end