2017-08-17 103 views
1

我是jQuery/Javascript的新手,并且遇到了与机器人实现聊天室的麻烦。我特别被卡在控制器和JS的沟通上。如何在帖子后更改轨道控制器的视图?

基本功能:

  1. 用户类型的注释
  2. 的Javascript发送到后导轨与评论数据控制器
  3. Ruby类(@bot)主罚评论和返回响应
  4. 得到回应加到视图

    这是我到目前为止

控制器

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

如果你正在创建一个聊天系统,我建议你研究服务器端事件或WebSockets。不要使用AJAX轮询,因为我确信有人会很快建议它。 –

+2

这个AJAX选项没有问题。这真的取决于你的需求:你真的需要实时聊天吗?或者如果每30秒更新一次就可以吗? – MrYoshiji

+0

@MrYoshiji如果需要20 - 30秒 – Quinty

回答

1

你有基本结构的想法是正确的。你只需要发送一个post请求到你在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 
    } 
}); 
相关问题