javascript - Rails 4/AJAX 从 Controller 获取数据

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

我之前发布了一个关于此问题的非常糟糕的问题,因此我重新发布并将其设为 MVCE。

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

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

目前,这是一种黑客工作方式,在我的 JS 代码中,我设置了一个超时,每半秒调用一次 AJAX GET 函数。有没有更好的方法来做到这一点 - 例如,一旦 Controller 保存消息,它可以调用 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"} 对我来说没有意义。 Controller 将数据发送回并存储到 data: 中的语法是什么?此外,从控制台我可以看到 what_goes_here 正在作为参数传递给 Controller ​​ - 这对我来说没有意义。

我的路线看起来像这样 get 'messages/get', :to => 'messages#get' (这可能不正确?)

rake 路线 显示

  messages_get GET    /messages/get(.:format)        messages#get

到目前为止,我的 Controller 中除了 respond_to 之外没有任何内容,因为此时我只是尝试调用 Controller 。将数据发送回 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 函数在数据库中查找消息,并将其存储在实例变量中。随后,我可以添加一些 Javascript 代码,将其插入到 DOM 中。但是我的路由一定有问题,因为我(在控制台中)http://localhost:3000/messages/get 404 (Not Found)

最佳答案

正如您怀疑的那样,您正在做的事情没有效果。在线用户越多,这些刷新请求的负载就越多,其中大多数可能不会返回新数据。

您应该考虑采用更主动的方式来通知浏览器有关服务器上的更改。一种选择是使用 ActionCable .

关于javascript - Rails 4/AJAX 从 Controller 获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38403576/

相关文章:

ruby-on-rails - 帮助 HABTM :through

css - Rails Font-Awesome 不显示 - 使用错误的文件名

javascript - 在原型(prototype)中使用 css 选择器触发点击事件

jquery - 用 div 填充容器

javascript - 全日历 v2 : How to maintain the same scroll time when navigating weeks?

javascript - 如何将数据动态添加到谷歌图表中

jquery - AJAX 成功 html 对话框,不会在按钮单击时关闭

javascript - 如何在 oracle apex 的动态操作中从 PLSQL 代码内部调用 Javascript

javascript - 当相机移动时更新对象的几何形状会导致故障 - Three.js

javascript - Bootstrap如何关闭所有下拉菜单onclick