Rails 4 / AJAX从控制器获取数据

时间:2016-07-15 19:14:21

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-4

我之前发布了一个非常糟糕的问题,所以我重新发布并制作MVCE。

我正在使用Rails和AJAX构建消息服务。到目前为止,我可以通过表单提交消息,它将在HTML DOM中更新,AJAX POST方法将其发送到控制器,控制器将其保存在数据库中。

现在我需要添加一个AJAX方法来获取刚刚提交的消息 - 以便其他用户(在其他浏览器中)能够查看它。

目前,这是一个黑客工作方式,在我的JS代码中,我设置了一个超时,每隔半秒调用一次AJAX GET函数。有没有更好的方法来做到这一点 - 例如,一旦控制器保存消息,它可以调用AJAX函数吗? AJAX代码如下所示:

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

data: { what_goes_here: "blah" }行对我没有意义。控制器将数据发送回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

更新

这对我来说更有意义...... AJAX方法只调用def get函数。然后def get函数在数据库中查找消息,并将其存储在实例变量中。随后,我可以添加一些将其插入DOM的Javascript代码。但是我的路由必定有问题,因为我(在控制台中)http://localhost:3000/messages/get 404 (Not Found)

1 个答案:

答案 0 :(得分:1)

正如您所怀疑的那样,您正在做的事情无效。在线用户越多,从这些刷新请求中加载的越多,其中大多数可能不返回新数据。

您应该考虑更积极地通知您的浏览器有关服务器上的更改。一种选择是使用ActionCable