2012-04-02 11 views
1

jQueryとRails 3.1間のAJAXリクエスト(現時点では、ローカルホストでの作業、ChromeとFirefoxでのテスト、これが役立つ場合)に取り組んでいます。ユーザーがリンクをクリックすると、2つのテキストフィールドの値をサーバーに渡します。具体的には、これらの2つの値を「回答」データベーステーブルに格納するAnswersControllerというコントローラがあります。jQueryからのAJAXリクエストにRails処理のパラメータがありません

以下は、リクエストを行うための私のフロントエンドコードです。この要求の応答関数が発生し、 "last_chance"と呼ばれる私の段落がサーバが応答するものによって満たされるので、要求はRailsによって正常に受信されます。

$('.other_question a').click(function(e) {   
     var this_profile_id = window.location.pathname.substring(1).split('/')[1]; 
     var this_question_id = window.location.pathname.substring(1).split('/')[3]; // there is a hidden space when splitting 

     var ajax_data = { 
      type : "PUT", /* should this be POST for older browsers? */ 
      url : '/profiles/' + this_profile_id + '/answers/' + this_question_id + '.json', 
      contentType : 'json', 
      dataType : 'json', 
      success : function(msg) { 
       alert("Data Saved: " + msg); 
       $('#last_chance').text(msg['saved']); 
      }, 
      data : { 
       _method : 'PUT', 
       page : { 
        authenticity_token : $('input[name=authenticity_token]').attr('value'), 
        answer : { 
         response : 'hi there', 
         comments : 'word' 
        }, 

        action : 'update', 
        controller : 'answers', 
        profile_id : this_profile_id, 
        id : this_question_id 
       }     
      }    
     }; 
     $.ajax(ajax_data); 
     return false; 

    }); 

ここでは、これを処理するために私のバックエンドのコードです:方法はAnswersControllerでの更新です。今

def update 
    respond_to do |format| 
     format.html { redirect_to 'http://google.com'} 
     format.json { render :json => {:saved => 'ok: ' + params.to_s }.to_json } 
    end 

    return 
end 

、私はRailsが受け取ったのparamsと「last_chance」段落要素を満たしたときに、それは次のことを示しています

ok: {"action"=>"update", "controller"=>"answers", "profile_id"=>"11", "id"=>"42", "format"=>"json"} 

何かがRailsが、私はAJAX呼び出しに含まれ、これらの他のパラメータを受け入れるか、受信していないことを、私は認識していないんだということが起こっていない限り、それは、そうです。誰かがなぜこれが私に説明できますか?そして、私はどのようにそれが含まれているすべてのパラメータを受け取ることを確認するのですか?

ご協力いただきありがとうございます。

ああ、私もすべてのデータパラメータを削除しました。同じ結果が返されました(つまり、Railsが返されたパラメータを処理することを意味します)。しかし、どうすればデータを渡すことができますか?これらのカスタムパラメータはどこに行きましたか?

EDIT:応答の提案から、私はこれにそれを変更:

params[:saved] = 'OK' 
    respond_to do |format| 
     format.html { redirect_to 'http://google.com'} 
     format.json { render :json => params.to_json } 
    end 

をこのことから、私は「last_chance」の部分に入った唯一の出力が「OK」でした。どこから行くことができますか?

答えて

1

のように、前にレンダリングパラメータを追加してください:

params[:saved] = 'ok: ' 
format.json { render :json => params.to_json } 
+0

こんにちはVik、ご回答いただきありがとうございます。私はこれを試して、私の最初の投稿の編集部分に結果を入れました。 paramsハッシュが空であるようです。どこから行くことができますか? – spanport

+0

paramsハッシュが応答を得る方法よりも空の場合:ok:{"action" => "update"、 "controller" => "answers"、 "profile_id" => "11"、 "id" => "42 "、" format "=>" json "}。 paramsをデバッグし、新しい値を追加する前後にその値を表示するだけです。params [:saved] = 'OK' 。あなたのログをチェックしてください。 – Vik

+0

こんにちはVik - 私はおそらく、この部分のあなたの提案に誤っていくつかの変更を加えたと思います。しかし、私はすべてのデータが "ページ"から "データ"自体に移動するように変更しました。ご協力ありがとうございます。 – spanport

1

AJAXリクエストの型パラメータが「POST」でなければなりません、あなたは_methodデータ・パラメータを使用してレールのバックエンドのために特別に設定します。これで問題が解決しない場合は、関連するルートを掲載できますか?ああ、コンテンツタイプを設定しないでください。デフォルトはあなたのユースケースに適しているからです。

+0

こんにちはmosch - これは、タイプとしてPUTで動作します。私がPOSTに変更した場合(それが推奨されていますか?)、更新アクションを指示する投稿用の別のルートを追加するだけですか?あるいは、Railsは隠された_methodパラメータで自動的にこれを行うことができますか? – spanport

+0

これはまるでレールがあなたのPOSTデータをまったく解析していないかのように見えるので、リクエストをGETリクエストとして解釈している可能性がありますか?それは明確ではないので、あなたがタイプを設定するときにどのブラウザを実行するのですか:「PUT」ではなく、「POST」と_method:Railsの回避策である「PUT」と一緒に行きます。 – moritz

関連する問題