【问题标题】:Access updated data without re rendering the whole page无需重新渲染整个页面即可访问更新的数据
【发布时间】:2019-09-26 09:46:21
【问题描述】:

我有一个Person 模型,它的位置每隔几秒钟就会从移动应用程序更新一次,并保存到数据库中。现在我想在不重新渲染整个页面的情况下访问视图中的更新信息。

我该怎么做?

我想做这样的事情

setInterval(function(){
  // display updated data
}, 5000);

p.s.:我只在时间间隔内使用 JavaScript,这是一个 Rails 问题。

每隔几秒钟重新加载一次页面有效,但完全扼杀了我正在尝试做的事情。

【问题讨论】:

标签: ruby-on-rails ruby-on-rails-5


【解决方案1】:

通过 ajax 请求获取数据。假设您要更新的 div 具有 id current-location 您可以这样做...

setInterval(function() {    
  $.ajax({
    type: 'POST',
    url: "/people/<%=@person.id%>/get_location",
    success: function(data) {
      $('#current-location').html(data.location);
    }
  });
}, 5000);

在你的 routes.rb 中定义一个成员路径

resources :people 
  member do
    post :get_location
  end
end

然后在您的 PeopleController 中创建一个名为 get_location 的操作,并确保最后几行类似于...

person_location = get_location # some method that returns location
render json: {location: person_location}

【讨论】:

  • 我完全照你说的做了
  • 那么如果你查看浏览器控制台是否有任何错误?
  • 我有一个 id 为 current-location 的空 div,我已经按照你所说的指定了路由文件,并且我在 people_controller person_location = current_user.people.last.latitude @ 中有如下操作987654328@
  • 它运行良好,但 3-4 秒后我在控制台中收到此错误 POST https://.../people/105/get_location net::ERR_INSUFFICIENT_RESOURCES跨度>
  • 有几个不匹配的括号导致错误
猜你喜欢
  • 2021-03-13
  • 1970-01-01
  • 2016-01-08
  • 2012-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-08
  • 2020-02-16
相关资源
最近更新 更多