2011-08-15 19 views
3

私はRails 3、Jquery-UJS、およびJqueryを使用しています。私はRails3とJqueryの作業設定があります。リンクをクリックしてJavascriptからRailsコントローラに変数を送信しようとしています。Jqueryを使用してJavascript変数をRails 3コントローラに送信

私の現在のアプローチでは、次のようにjsを使用してajax呼び出しを行い、msg文字列を渡しています。

$("#select_link").click(function() 
{$.ajax({ 
type: 'POST', 
url: 'http://your_url/jmsg', 
data: {msg: "hello world"}, 
;} 
}); 
}); 

このコードをapplication.jsファイルに含める必要がありますか?私.html.erbファイルで

私は私のコントローラで

<%= link_to "Send variable", jmsg_path, :remote => true %> 

を持って、私は今まで

def jmsg 
@message= params[:msg] 
respond_to do |format| 
format.js 
end 
end 

を持って、私は私の@messageにjavascriptの変数を取得することができていませんでしたインスタンス変数

EDIT:

私は示唆したように変更を加えました。私はFiebugを使ってXHRをチェックすると、私はPOSTアクションのために一時的に移動302を参照してください、私は

@message=params[:msg] 

を行う際ただし、変数@messageは(POSTパラメータMSGが正しくかかわら設定されている)に設定されていません。

$("#show_message").html("<%= @message %>") 

EDIT2:私はFirebugのを確認した場合、それは二つの動作が今があることを示しています $( "#のshow_message")HTML( "")

私の.jsビューがある - 応答があります。 1. POST/jmsg - 応答@message = "Hello World" の 2. GET/jmsgと - 応答@メッセージ= "と"

答えて

1
を試してみてください

コントローラから何か値を取得したいとき、私はいつもjson形式を使います。

// jmsg.js.erb

{ 
    "message": "<%= @message %>" 
} 

// yourjs.js

$.ajaxSetup({ 
    'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") } 
}); 

$("#select_link").click(function(){ 
    $.ajax({ 
    type: 'POST', 
    url: 'http://your_url/jmsg', 
    dataType: 'json', 
    data: {msg: "hello world"}, 
    success: function(json, status, xhr){ 
     // $("#show_message").html(json.message) 
    } 
    }); 
}); 

// your.html.erbで、削除:リモート=>真

<%= link_to "Send variable", jmsg_path %> 
+0

ありがとう! data:{msg: "hello world"} msgパラメータと値 "hello world"を持つPOSTを与えます(Firebugでチェックします)。私はまだ変数@メッセージを設定することはできません(上記の私の質問を編集した上で) –

+0

Iveが私のソリューションを更新しました。助けてくれると助かります – raymondralibi

+0

ありがとう! Jsonデータは、POST/jmsg(Firebugでチェック)で受信されています。しかし、@ message変数は、コントローラのredirect htmlオプションのためにGET/jmsgを取得するため、永続化されません。 (ステートレスコントローラ)。どうすればこれを避けることができますか? (私はデータベースに保存することが解決であることを認識しています) –

0

は、アプリケーションのjsに以下のコードを追加して、この

$(function(){ 
    $("#select_link").click(function(){ 
     $.ajax({ 
     type: 'POST', 
     url: 'http://your_url/jmsg', 
     data: { msg: "hello world" }, 
     }); 
    }); 

}); 
+0

ご返信いただきありがとうございます。私はまだ@メッセージインスタンス変数を設定することができず、私の.jsビューに何も表示されません。私は詳細を追加するために私の質問を編集しました。 –

+0

この行をどこに置いていますか$( "#show_message")。html( "<%= @message%>") '? – ShankarSangoli

+0

その行は私のformat.jsファイル(jmsg.js)です。私のコントローラコードを参照してください。まずPOST/jmsgを取得した後、format.jsが実行され、GET/jmsgによってリダイレクトされます。 @message変数は永続化されません。 –

0

RailsでAJAXとjQueryを目立たない形で使用していることを知っています。

まず、DOMがロードされる前にロードする機能であると、次のように関数を作成し、同じファイルでのごapplication.jsファイル

jQuery.ajaxSetup({ 
    'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") } 
}); 

その後、の初めにこれを含めます。この機能では、独自の関数を記述します。

$(function() { 
    $("#select_link").sendVar(); 
} 

jQuery.fn.sendVar = function(){ 
    this.click(function() { 
    var msg= 'hello world'; 
     $.post('/your_url/jmsg/' + msg, function(data){ 

     }) 
     return false; 
    }); 
} 

は、例えばのために、あなたがroutes.configファイルでこのポスト要求のためのルートを持っていることを確認してください

match 'your_url/jmsg/:msg', :controller => 'your_url', :action => 'jmsg', :via => :post 

これがうまくいくかどうか教えてください。同様のコードが私のために働いていました。ありがとう。

+0

返事をありがとう。あなたのコードはPOSTアクションを行い、msg変数を送信しています。私は似たようなことをしています。他にも問題があるようです。コントローラはステートレスなので、おそらく@message = params [:msg]は無効ですか? –

+0

params [:msg]は完全に有効です。あなたのコードもPOSTをやっています。私のコードを試しましたか? routes.rbファイルにルートを含めることを含め、すべてのもの。これはうまくいくはずです。 – rookieRailer

関連する問題