Javascript 使用jQuery和Rails定期ping服务器而不使用表单,更新表

Javascript 使用jQuery和Rails定期ping服务器而不使用表单,更新表,javascript,jquery,ruby-on-rails,ajax,rest,Javascript,Jquery,Ruby On Rails,Ajax,Rest,我有点傻,所以请容忍我 我正在尝试——当用户在仪表板上登录时——让jQuery每隔X秒定期ping服务器,用当前日期时间更新用户的“心跳”,并将“online”设置为true 我可能遗漏了一些RESTful概念和涉及jQuery和Rails之间通信的概念。刚刚完成Michael Hartl的Ruby on Rails教程,我正在构建他的示例应用程序 我做过研究,但答案大多涉及填写表格;我想在没有人的情况下做到这一点 因此,我需要以某种方式将一个:user_id传递到jQuery中,并将其链接到正

我有点傻,所以请容忍我

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

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

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

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

rake路由显示:PUT/states/:id(:format)states#update

说明控制器.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
class StatesController
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);
            }
        });
    }
});
jQuery.ajaxSetup({
“beforeSend”:函数(xhr){xhr.setRequestHeader(“Accept”,“text/javascript”)}
})
//定期更新心跳
$(函数(){
设定间隔(砰,3000);
var js='';
函数thump(){
log(js+'Test');
$.ajax({
url:“状态/更新”,
键入:“POST”,
成功:功能(结果){
console.log(js+result);
}
});
}
});

感谢您的帮助。

如果您尝试对其执行操作的用户与当前登录的用户相同,您似乎不需要传递任何内容,只需使用控制器中的当前用户(或其他任何内容),而不是传递id并再次重新获取同一对象。

为什么不将.js文件更改为这样:

function giveLife(url) {
    setInterval (thump, 3000);
    var js = '<thump> ';
    function thump(){
        console.log(js + 'Test');       
        $.ajax({
            url: url,
            type: 'POST',
            success: function(result) {
                console.log(js + result);
            }
        });
    }
}
函数giveLife(url){
设定间隔(砰,3000);
var js='';
函数thump(){
log(js+'Test');
$.ajax({
url:url,
键入:“POST”,
成功:功能(结果){
console.log(js+result);
}
});
}
}
并将其放在要启动心跳的视图中:

<script type="text/javascript">
    $(function(){
         giveLife(<%= states_path(@state, @user_id).to_json %>);
    });
</script>

$(函数(){
给予生命();
});

$(function(){giveLife(“/states”);未捕获的语法错误:意外标记&});抛出一个奇怪的错误。但是我真的很喜欢这个方法。。。我在某处读到js在逃离rails变量时遇到了一些问题。这就是这里发生的事情吗?
raw states\u path(@state,@user\u id)。到json
这是真的。。。现在试一试。现在,我是接吻原则的忠实粉丝。。。祝你好运。另外,使用当前的_用户可以使它更加防篡改。我不确定这在这个特定的应用程序中是否重要,但对于将来类似的问题,需要记住这一点。POST 500(内部服务器错误)jquery.js:8241 send jquery.js:8241 jquery.extend.ajax jquery.js:7720 thump谢谢,很高兴知道。但是是的,我不知道为什么我现在得到一个内部服务器错误。。。有什么想法吗?否则我会花一些时间玩弄rails控制台。Xxsu500(内部服务器错误)。这两种方法的实现都是一样的。看起来我的状态控制器有另一个问题,特别是我的重击方法。。。唉,我会睡在这一个。。。