0

我不知道这是否是正确的方法,但我想完全按照标题所说的去做。我缺少一些 jQuery 概念,因为我是新手。

我正在使用jQuery.rest:https://github.com/lyconic/jquery.rest

此脚本会定期检查在线和离线用户是否已更新:

<!-- Online checker -->
<script type="text/javascript">
  $(function(){
    setInterval (checkTrackings, 5000);
    var js = '<checkTrackings> ';
    function checkTrackings(){     
      $.read(
        '/users/{id}/check',
        { id: <%= @user.id.to_json %> },
        function (response) {
          $("ul#online").empty();
          $("ul#offline").empty();

          // Code to add users back to list
          $("ul#online").html('<%= escape_javascript(render(@online_users)).html_safe %>')
          $("ul#offline").html('<%= escape_javascript(render(@offline_users)).html_safe %>')


          console.log(js + 'Check trackings');
        }
      );
    }
  });
</script>

但是,我需要返回的 JSON 对象,而不是 @online_users 和 @offline_users,并且需要将它们转换为所述变量。该脚本调用的方法在这里:

  # Updates contacts
  def check
    @online_users = Array.new
    @offline_users = Array.new

    @user = User.find(params[:id])
    @followed_users = @user.followed_users

    @followed_users.each do |followed_user|
      @online_users.push(followed_user) if followed_user.state.online
    end

    @offline_users = @followed_users - @online_users

    respond_to do |format|
      format.js { render :json => { :online_users => @online_users, :offline_users => @offline_users } }
    end
  end

任何其他提示也会很好。我对网络开发很陌生。谢谢您的帮助!

4

1 回答 1

1

您是否尝试过将响应记录在

function (response) {...}

您的响应应该分别具有 response.online_users 和 response.offline_users 对象,因此登录为:

function (response) {
  console.log(response.online_users, response.offline_users);
  ...
}

看看您的响应是否包含您的 json 对象?

因此,如果您有 response.online_users,您需要在 javascript 中执行此操作:

// Code to add users back to list
var online_users = response.online_users,
    online_users_len = online_users.length,
    buffer = [];

for(var i = 0; i < online_users_len;  i++) {
  buffer.push("<li>", online_users[i], "</li>");
}
          $("ul#online").html(buffer.join(""));
// Put the offline user count in ul#offline
          $("ul#offline").html(response.offline_users);
于 2012-11-27T00:44:28.450 回答