私はこのことについて非常に貧弱な質問を投稿したので、私は再転記してMVCEにしています。Rails 4/AJAXからコントローラのデータを取得する
私はRailsとAJAXを使ってメッセージングサービスを構築しています。これまではフォームからメッセージを送信し、HTML DOMで更新し、AJAX POSTメソッドがコントローラに送信し、コントローラがデータベースに保存します。
今すぐ送信したメッセージを取得するAJAXメソッドを追加する必要があります。他のユーザー(他のブラウザ)が表示できるようにする必要があります。
現在のところ、これはそれを行うためのハック・ジョブの方法です。私のJSコードでは、半秒ごとにAJAX GET関数を呼び出すタイムアウトを設定しています。これを行うより良い方法はありますか?コントローラがAJAX関数を呼び出すことができるようにメッセージを保存したらどうでしょうか?私には意味がありませんdata: { what_goes_here: "blah" }
function retrieveMessages(){
var message;
<%debugger%>
$.ajax({
type:"GET",
url:"<%= messages_get_path %>",
dataType:"json",
data: { what_goes_here: "blah" }, //this is the part I do not understand -- see below
success:function(data){
message = data;
console.log(data)
}
});
setTimeout(retrieveMessages, 500);
}
$(document).ready(function(){
//get messages
setTimeout(retrieveMessages, 500);
... more irrelevant
ライン:AJAXコードは次のようになります。コントローラがデータを返信してdata:
に格納する構文は何ですか?さらに、コンソールから私はwhat_goes_here
がコントローラにパラメータとして渡されているのを見ることができます - これは私には意味がありません。
私のルートは、このget 'messages/get', :to => 'messages#get'
(これは正しくないかもしれない?)
rake routes
が
messages_get GET /messages/get(.:format) messages#get
を示しそして今のように、私が原因でrespond_to
以外の私のコントローラには何も持っていないように見えますこの点、私はちょうどコントローラを呼び出すことを試みています。データをAJAXメソッドに返す構文は何ですか?
def get
debugger
respond_to do |format|
format.html
format.json {render json: @variable} //is this @variable being passed to the AJAX call?
end
end
UPDATE
これは私に多くの意味があります... AJAXの方法は、単純にdef get
関数を呼び出します。 def get
関数は、データベース内のメッセージを見つけて、それをインスタンス変数に格納します。その後、DOMに挿入するJavascriptコードを追加できます。しかし、私は(コンソールで)取得しているので私はルーティングに何かが間違っている必要がありますhttp://localhost:3000/messages/get 404 (Not Found)
他のブラウザを使用している他のユーザーは、送信されたらすぐにメッセージを表示する必要がありますか? –
@ニックニロフ正しい、これは、これとは全く別のやり方がありますか? –
'data:{what_goes_here:" blah "}'は、気付いたように、リクエストに余分なパラメータを指定するためのものです。メッセージを更新するための余分なパラメータは必要ないと思われるので、この行を削除するだけで済みます。 –