2016-07-15 6 views
1

私はこのことについて非常に貧弱な質問を投稿したので、私は再転記して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)

+0

他のブラウザを使用している他のユーザーは、送信されたらすぐにメッセージを表示する必要がありますか? –

+0

@ニックニロフ正しい、これは、これとは全く別のやり方がありますか? –

+0

'data:{what_goes_here:" blah "}'は、気付いたように、リクエストに余分なパラメータを指定するためのものです。メッセージを更新するための余分なパラメータは必要ないと思われるので、この行を削除するだけで済みます。 –

答えて

1

あなたがしていることは、あなたがしていると思われる効果がありません。より多くのユーザーがオンラインになればなるほど、これらの最新の要求から多くの負荷が発生し、ほとんどのユーザーは新しいデータを返さないでしょう。

サーバーの変更についてブラウザに通知する方法をさらに積極的に検討する必要があります。 1つのオプションはActionCableです。

関連する問題