2

ajax 経由でデータを正常に送信するフォームがありますが、ajax アクションの後にイベントをトリガーする方法がわかりません。新しいレコードが送信された後、フォームを含むパーシャルをリロードしたいと思います。

意見

#container
  #partial
   <%= form_for [@qa, @newpdd], :remote => true do |f| %>
    ....
   <%= f.submit "add %>

PDD コントローラー

def create
@pdd = Pdd.create!(params[:pdd])
@pdd.qa_id = params[:qa_id]
@qa = Qa.find(params[:qa_id])

respond_to do |format|
  if @pdd.save
    format.html { redirect_to(@qa, :notice => 'Pdd was successfully created.') }
    format.xml  { render :xml => @pdd, :status => :created, :location => @pdd }
    format.js
#    render :partial => pddsection
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @pdd.errors, :status => :unprocessable_entity }
  end
end
end

create.js.erb

$('#partial').replaceWith("<%= escape_javascript(render :partial => 'pdds/partial') %>");

何か案は?

4

2 に答える 2

0

<%=j %>の代わりに タグを使用します<%= escape_javascript() %>が、機能的には似ているかもしれません。

あなたのコードはよさそうです。:remote => trueサーバーから返された JavaScript (この場合は create.js.erb) をブラウザで実行する必要があります。トラブルシューティングの手順として、ブラウザーの開発者コンソールを開き、ajax フォームの送信から得られる応答を確認します。ビューのレンダリングは正しいですか? ERB がレンダリングした JavaScript は正しいですか?

良さそうなら、それをコピーして JavaScript コンソールに貼り付けます。それでもページが更新されない場合は、何が問題なのかを調べてください。セレクターが正しくないか、構文エラーである可能性があります。

于 2012-05-29T01:57:05.020 に答える
0

このレールキャストで示されているように、フォームの :remote => true 条件を放棄することになりました。

レールキャスト 136

すべてが期待どおりに機能するようになりました。助けてくれてありがとう。

于 2012-06-05T10:51:34.783 に答える