javascript - 在没有表单的情况下使用 jQuery 和 Rails 定期 ping 服务器,更新表

标签 javascript jquery ruby-on-rails ajax rest

我有点菜鸟,所以请多多包涵!

我正在尝试——当用户在仪表板上登录时——让 jQuery 每隔 X 秒定期对服务器执行 ping 操作,并使用当前日期时间更新用户的“心跳”,并将“在线”设置为 true。

我可能遗漏了一些 RESTful 概念和涉及 jQuery 和 Rails 之间通信的概念。刚刚完成 Michael Hartl 的 Ruby on Rails 教程并正在构建他的示例应用程序。

我做过研究,但答案主要涉及填写表格;我想在没有人的情况下做到这一点。

所以我需要以某种方式将 :user_id 传递给 jQuery 并将其链接到正确的 URI。我有一个状态 Controller 和一个属于用户(拥有其中一个)的状态模型。 Heartbeat 和 Online 在 states 表中。

rake routes 显示:PUT/states/:id(.:format) states#update

states_controller.rb

class StatesController < ApplicationController
  before_filter :signed_in_user, only: [:thump]
  before_filter :correct_user,   only: [:thump]

  def new
  end
  def update
    @user = User.find(params[:id])
    user.update_attributes(heartbeat: Time.now, online: true)

    respond_to do |format|
      format.js
    end
  end
end

application.js

jQuery.ajaxSetup({ 
  'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript")}
})

// Periodically updates heartbeat
$(function(){
    setInterval (thump, 3000);
    var js = '<thump> ';
    function thump(){
        console.log(js + 'Test');       
        $.ajax({
            url: 'states/update',
            type: 'POST',
            success: function(result) {
                console.log(js + result);
            }
        });
    }
});

感谢您的帮助。

最佳答案

如果您尝试执行的用户与当前登录的用户相同,那么您似乎不需要传递任何东西,只需在您的 Controller 中使用 current_user (或其他),而不是传递一个 id 并再次重新获取相同的对象。

关于javascript - 在没有表单的情况下使用 jQuery 和 Rails 定期 ping 服务器,更新表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13283738/

相关文章:

javascript - 使用 Angular 2/4 多选元素

javascript - 有条件取决于风格

javascript - 固定容器内子 div 中的滚动条

ruby-on-rails - 分离的 gem 上的rake gems:refresh_specs错误

jquery - 使用 asset pipeline 和 pjax 时未捕获的 ReferenceError

javascript - 使用js调整div内iframe的大小

javascript - paroller.js 在第一次加载页面时无法正常工作

javascript - 将外部变量获取到 image.onload

Jquery 和 livequery

ruby-on-rails - 按多列组合对结果集进行分组