0

私はRails 3.2.3を使用しており、次のフォームがあります

<%= form_for(@item, url: list_path, remote: true, html: {id: "item-create-form", class: "form-horizontal"}) do |f| %>
    <div class="input-append">
        <%= f.text_field :description, id: "item-description-input", autofocus: true, placeholder: "Type and press enter." %>
    </div>
<% end %>

次のコードを使用した作成アクション:

def create
  @user = User.find_by_username(params[:username])
  @item = current_user.items.build(params[:item])
  respond_to do |format|
    if @item.save
      @item.update_attribute(:vpos, 0)
      @items = Item.find_all_by_user_id(@user)
      @items.each do |item|
        item.update_attribute(:vpos, item.vpos + 1)
      end
      format.js
    else
      format.js {render "errors" }
    end
  end
end

対応する js.erb ファイルがあり、期待どおりにレンダリングされます。コードは次のとおりです。

$('#position-zero').after('<%= escape_javascript(render(:partial => @item)) %>');
$('#item-create-form').html('<%= escape_javascript(render(:partial => "item_create_form", :locals => { :@item => Item.new })) %>');
$("#item-description-input").focus();
$(".best_in_place").best_in_place();

私の application.js ファイルは次のようになります。

//= require jquery
//= require jquery_ujs
//= require jquery-ui
//= require jquery.purr
//= require best_in_place
//= require_tree .
// Loads all Bootstrap javascripts
//= require bootstrap

Chrome と Safari ではすべてがうまく機能します - HTTP 200 応答のみです。

ただし、Firefox では、最初のフォーム送信は正常に機能します。しかし、2番目のものは私に406 not acceptedエラーを与えます。

Firebug を確認するtext/javascriptと、最初のリクエストではコンテンツ タイプが に設定されていますが、2 番目のリクエストでは変更さtext/htmlれます。

format.js の後にコンテンツ タイプを設定し (so:{ render content_type: 'text/javascript' }のように)、コントローラーにヘッダーを設定しようとしましたが (so: のように)、役に立ちheaders["Content-Type"] = "text/javascript; charset=utf-8"ませんでした。

この厄介な問題に光を当てることができる良い魂はありますか?

4

1 に答える 1

1

ur js.erb の 2 行目に注目してください。フォーム内にフォームを追加しています。したがって、基本的にフォームを2回目に送信すると、最初のフォームはajaxリクエストとして送信されますが、その上のフォームは送信されず、問題が発生します。その2行目を削除する必要があり、問題はありません

于 2012-04-19T17:11:10.980 に答える