Javascript 即时生成投票(Rails+;MySQL+;jQuery)

Javascript 即时生成投票(Rails+;MySQL+;jQuery),javascript,jquery,html,ruby-on-rails,ruby-on-rails-3,Javascript,Jquery,Html,Ruby On Rails,Ruby On Rails 3,我正在努力研究如何使用Rails和jQuery构建一个“upvote”流,以便最终用户能够立即进行upvote 首先,定义upvote,我的意思是,就像你在reddit上所做的那样,点击向上箭头注册一个记录的投票,并增加一个计数器(YouTube上的竖起大拇指就是另一个例子) 我在数据库中使用Rails3.2、jQuery和MySQL 现在我的流程是: 在html.erb模板中,upvote元素有一个.js remote upvote类,该类使用jQuery将其绑定到单击: $('body')。

我正在努力研究如何使用Rails和jQuery构建一个“upvote”流,以便最终用户能够立即进行upvote

首先,定义upvote,我的意思是,就像你在reddit上所做的那样,点击向上箭头注册一个记录的投票,并增加一个计数器(YouTube上的竖起大拇指就是另一个例子)

我在数据库中使用Rails3.2、jQuery和MySQL

现在我的流程是:

  • 在html.erb模板中,upvote元素有一个
    .js remote upvote
    类,该类使用jQuery将其绑定到单击:

    $('body')。关于('click','js remote upvote',函数(e){
    e、 预防默认值();
    e、 停止传播();
    $this=$(e.currentTarget);
    $.ajax({
    类型:$this.data('method')==“post”?“post”:“GET”,
    url:$this.data('url'))
    })
    });

  • 数据url
    转到我的UpvotesController切换操作,该操作创建upvote记录,并处理一些其他杂项。事情

  • 然后,toggle.js.erb模板包含javascript代码,该代码在upvote元素上添加一个
    .active
    类,并递增计数器 问题是,无论我多么努力地在控制器中精简切换操作,它都会消耗一些时间(在应用程序范围内进行过滤、跟踪等)。这会导致最终用户感觉不到即时更新投票,我觉得当我们习惯于在reddit上即时更新投票时,这会导致糟糕的用户体验

    我这样想对吗?或者我应该在请求传递到Rails之前立即增加计数器并设置
    .active
    css类吗?我觉得这是不对的,因为控制器可能会抛出一个异常——基本上,它感觉js是“愚蠢的”,无论后端发生什么,它都会立即向用户显示向上投票

    采用这样的模式会不会很糟糕?
    谢谢

    我也这么做了,但使用了一个技巧。作为一名软件开发人员,只有我们知道幕后发生了什么。因此,无论您如何努力,您都必须存储
    upvote
    count,单击
    upvote
    ,count
    增加了
    等详细信息,然后更新视图

    而不是转到服务器,更新数据库中的详细信息,然后更新视图。您可以先更新/更改视图,然后使用AJAX移动到服务器,这对用户来说很快。

    ####update the count and also show that user has voted successfully by jquery
    $('#image_up_<%= @image.id%>').html(function(i, val) { return val*1+1 });
    $(".user_vote_status").html("You like this Image");
    
    因此,首先要获得良好的用户体验。首先使用jquery更新视图代码,然后使用ajax从更新投票的控制器调用方法。…因此,至少对于用户来说,它的瞬间,而且您知道,在幕后,至少需要2秒钟

    在视图文件中…

    ####update the count and also show that user has voted successfully by jquery
    $('#image_up_<%= @image.id%>').html(function(i, val) { return val*1+1 });
    $(".user_vote_status").html("You like this Image");
    
    在vote.js.erb中

     $('#image_up_<%= @image.id%>').html("<%= @image.likes.size %>");
     //update the vote status on the page that user has liked/disliked the post
    $(".user_vote_status").html("You like this Image");
    
    $('#image_up').html(“”);
    //更新用户喜欢/不喜欢帖子的页面上的投票状态
    $(“.user\u vote\u status”).html(“您喜欢此图像”);
    
    我建议您立即显示用户已投票。这不是那种需要很多安全性的信息。如果下一页出现问题,请重新加载此投票失序,这样您就不会担心有人在某些时候投票了