0

を持っているフォームがありますremote => true。私が最初にそれを提出するとき、すべてがうまくいきます。

エラーがある場合は、このフォームに新しいフィールドを追加したいと思います。私はこれをで行いましupdate.js.erbた。

問題は、このフォームを再送信すると、結果のjsファイルがhtmlとしてレンダリングされることです(つまり、画面にjsファイルのテキストが表示されます)。これはupdate.js.erb、最初にjsとしてレンダリングされたものと同じファイルです...

私が欠けているものはありますか?

更新:最初の試行では、形式は次のとおりです。

format
=> #<ActionController::MimeResponds::Collector:0xc61711c
 @order=[text/javascript],
 @responses={text/javascript=>nil}>

2回目の送信では、次のようになります。

format
=> #<ActionController::MimeResponds::Collector:0xceaadec 
@order=[], 
@responses={}>

私のupdate.jsは基本的に

$("#checkout_modal").html("<%= escape_javascript(render 'plan_pay_modal')%>"); 

そしてplan_pay_modalは元のページと同じ部分的です(エラーがある場合に新しいフィールドを表示するフォーム。私も同じ問題のフィールドだけを試しました)。

4

2 に答える 2

1

問題は、jqueryを介して送信していたことでした。

form$.get(0).submit()

この場合は動作しません...動作するために私は使用しなければなりませんでした

form$.trigger("submit.rails")

rails 3 jqueryを使用してリモートフォームを送信し、コールバックを回避するにはどうすればよいですか?

于 2012-09-12T18:41:46.817 に答える
0

JavaScriptがWebブラウザーのコンテンツとして表示される場合は、ブラウザーによって送信された要求がajax要求ではなく通常のhtml要求であったことを意味します。これは、フォームが2回目に送信されたときに、何らかの理由で:remote=>trueに設定されていないことを意味します。これが当てはまる理由を調査するか、コードを貼り付けて、さらにサポートできるようにすることをお勧めします。

コントローラのアクションで次のように応答することで、私が言っていることが正しいことを検証できます。

respond_to do |format|  
  format.html  { raise "Request is not ajax based!" }
  format.js { render 'update' }
end 

編集:

2番目の投稿は正しく表示されないため、update.js.erbは、フォームが正しく機能しなくなるようにフォームを変更している可能性があります。以前モーダルにあったものと同じコンテンツをレンダリングしてみませんか。つまり、元々ページにモーダルでパーシャルを表示すると、update.js.erbはそのパーシャルを再レンダリングして、モーダルコンテンツを置き換えます。エラーが発生した場合に追加される新しい動的フィールドをアクティブ化するifをパーシャルに含めることができます。

于 2012-09-12T15:36:45.967 に答える