2017-08-17 12 views
1

jQuery/Javascriptが新しく、ロボットでチャットルームを実装するのに問題があります。私は特にコントローラーとJSのコミュニケーションに固執しています。投稿後にレールコントローラからビューを変更するにはどうすればよいですか?

基本的な機能:

  1. ユーザーのタイプは
  2. Javascriptがコメントを受け取り、応答を返す
  3. レスポンスが取得するコメントデータ

  4. Rubyのクラス(@bot)とコントローラをレールにポストを送信コメント表示に追加

    これは私が今までに持っているものです

コントローラ

class MainPageController < ApplicationController 
    def chat 
    @username = params[:username] 
    @bot = JibunBots.new(@username, Message.where(:username => @username).first.message) 
    respond_to |post| do 
     return @bot.conversation(post.data) 
    end 
    end 
end 

Javascriptを

$(document).ready(function() { 

$("#submitmsg").click(function(){ 

    var clientmsg = $("#usermsg").val(); 
    $('<p>' + gon.username + ": " + clientmsg + '</p><br>').appendTo('#chatbox'); 
    $("#usermsg").attr("value", ""); 
    #SEND POST HERE? 
    #RECEIVE DATA FROM CONTROLLER? 
    #ADD NEW COMMENT HERE? 
    }); 
    }) 
+2

チャットシステムを作成している場合は、サーバーサイドイベントやWebSocketを調べることをおすすめします。まもなく誰かがそれを提案すると確信しているので、AJAXのポーリングを使用しないでください。 –

+2

このAJAXオプションに問題はありません。あなたのニーズに本当に依存します:リアルタイムチャットが本当に必要ですか、それとも30秒ごとに更新されても大丈夫ですか? – MrYoshiji

+0

@MrYoshiji 20~30秒かかりますと完全に問題ありません – Quinty

答えて

1

あなたは正しい基本構造のアイデアを持っています。あなたはあなたのコントローラに関連するroutes.rbで作成したルートに投稿要求を送信し、保存したメッセージとともにjsonオブジェクトを返すだけです。

jQuery.ajax({ 
    url: "/chat/create", // a route in routes.rb for your controller 
    type: "POST", 
    data: {comment: submitted_comment , user_id: user_id }, // place to send data to your controller 
    dataType: "json" 
    success: function(data){ 
    // data will be the response object(json) 
    // use data to create new chat object using a template of some sort 
    } 
}); 
関連する問題