Javascript 即时生成投票(Rails+;MySQL+;jQuery)
我正在努力研究如何使用Rails和jQuery构建一个“upvote”流,以便最终用户能够立即进行upvote 首先,定义upvote,我的意思是,就像你在reddit上所做的那样,点击向上箭头注册一个记录的投票,并增加一个计数器(YouTube上的竖起大拇指就是另一个例子) 我在数据库中使用Rails3.2、jQuery和MySQL 现在我的流程是: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')。
.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记录,并处理一些其他杂项。事情.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(“您喜欢此图像”);
我建议您立即显示用户已投票。这不是那种需要很多安全性的信息。如果下一页出现问题,请重新加载此投票失序,这样您就不会担心有人在某些时候投票了