8

formtastic を使用して生成されたフォームを持つ Rails アプリケーションを開発しています。Ruby-1.9.2、Rails-3.0.1、jQuery、および AJAX を使用して、localhost:3000 でローカルに開発およびテストしています。

以下は、私が見ている問題のサンプル画面出力です。フォームが 1 秒以内に 2 回送信されます。なぜこれが起こっているのか理解できません。GET を含むすべてのリクエストでこの問題が発生します。

  1. 2011-01-07 02:31:47 +0530で 127.0.0.1 の POST "/businesses/6/edit_balance" を開始JS パラメーターとして BusinessesController#edit_balance による処理: {"utf8"=>"✓", "authenticity_token"= >"zcWH08sV8kPbAYy7JQX64Cu2e1i/kEB1AB4x5a08CO8="

  2. 127.0.0.1 の POST "/businesses/6/edit_balance" を 2011-01-07 02:31:48 +0530 で開始 JS パラメーターとして BusinessesController#edit_balance で処理: {"utf8"=>"✓", "authenticity_token"= >"zcWH08sV8kPbAYy7JQX64Cu2e1i/kEB1AB4x5a08CO8="

それで、私は基本的なプログラミングエラーを起こしているのではないかと思っています. はいの場合、私が試すことができるいくつかの解決策を提案していただけますか。

4

3 に答える 3

9

Heroku にデプロイした直後に同じ問題が発生しました... アセットをプリコンパイルしたところ、突然 AJAX の送信が 2 回発生しました。public/assets に javascript ファイルが重複してしまったようです。

この問題を解決するために、public/assets ディレクトリ全体を削除しました。

于 2012-01-31T03:01:47.910 に答える
1

Javascriptを使用してフォームを送信する場合は、フォームの送信時に送信ボタンを無効に設定してみてください。jQueryを使用すると、次のようになります(テストされていません)。

$('form').submit(function(){
  $(this).find(input[type='submit']).attr("disabled", "true");
  ... // submit form via AJAX
  return false;
});
于 2011-01-06T21:43:02.517 に答える
0

ありがとう PolarBlau..あなたの提案を試してみましょう..

アプネダイビング: 以下は、1. フォームを作成する (フォームの部分) 2. フォームを格納するダイアログを定義する (ダイアログの部分) 3. フォームにアクションをアタッチする JS のビット コードです。

フォームの一部 (credits_form)

- f.inputs :name => 'Edit Credits' do 
  = f.input :numeric_input_1, :label => 'Amount', :as => :select, :collection => [1000,2000,3000] 
  = f.input :boolean_input_1, :label => 'Add Credits'
  = f.commit_button :label => 'Submit' 

ダイアログ部分

#edit-credits-dialog

- @user_input = UserInput.new

 = semantic_form_for @user_input, :remote => true do |f|     
 = render :partial => 'businesses/credit_form', :locals => {:f => f}

JS コード

$.getJSON('/businesses/' + id + '/load_credits', function(data) { 
    var form = $('#edit-credits-dialog form') ; 

    form.attr('action', '/businesses/' + id + '/edit_balance') ; <-- seems to be happening twice
    $('#edit-credits-dialog').dialog('open') ; <--- happens once 
}) ; 
于 2011-01-07T05:43:44.323 に答える