2

ajax経由でフォームを送信しています。フォームが正常に送信されると、ページは別の場所にリダイレクトされます。フォームが失敗した場合、パーシャル (.js.erb) とインライン エラーでフォームを再レンダリングします。

これはうまくいきます。

私が抱えている問題は、ページが再レンダリングされるときに、何らかのタイプの json 応答/データを application.js に送り返す必要があることです。ただ、これが可能かどうかはわかりません。

//application.js

$(document).on('click','#sumbit_div',function(e) {
$.ajax({
   url: '/create',
   type: 'post',
   dataType: 'script',
   data: $('#the_form').serialize(),
   cache: false,
   success: function(xhr,data) {
     console.log('success');
   },
   error: function(data) {
     console.log('error')
     console.log(data.value_from_format_json);
   },
});
});

//コントローラーでアクションを作成します。

rescue ActiveRecord::RecordInvalid => e

respond_to do |format|
format.json {render :json => { :status => 403,:success => false }}  
format.js
end

送信に失敗しても、.ajax 応答では成功であることを認識しています。後でこれを処理する方法に対処できます。今、私は何を達成できるか知りたいだけです。

最後のメモは、これがレール 2.3 にあることです (まだアップグレードの過程にあります)。しかし、ujs で動作するようにすべての jquery ライブラリ (rails.js/jquery.js/etc) を更新しています。

ありがとう

4

2 に答える 2

2

データを application.jsに送信するのではなく、application.jsに DOM からプルさせる必要があります。application.js がキャッチできるように、create.js.erb で DOM を変更します。

または、さらに良いことに、create.js.erb から目的の関数を呼び出して、必要なパラメーターを渡します。

于 2013-02-03T21:25:17.857 に答える
1

「json」応答またはjs応答の「js」を取得するには、dataTypeをjsonに変更する必要があると思います。

于 2013-02-03T21:26:10.217 に答える