我有一个类似于我正在努力练习的SO克隆。我正在编写投票系统。我希望当单击upvote / downvote按钮时,会发送一个Ajax调用,其中包含处理页面的参数,其中包含post id和value。
该帖子需要能够知道在javascript调用的处理页面上记录哪个帖子
我有一个帖子表,每个帖子都有一个帖子ID和一张带有投票ID的投票表,所以在我的投票映射表中我记录了帖子ID旁边的主题ID。
但是我无法弄清楚如何为每个不同的帖子动态地为Ajax调用提供不同的帖子ID?我应该创建一个隐藏的领域吗?
这是如何做到的?非常感谢!
答案 0 :(得分:2)
实际上,您也不需要使用隐藏字段。 )使用帖子的ID本身 - 或upvote / downvote按钮的rel属性可能更简单。像那样:
<强> HTML 强>
<div id='post-XXX'>
<a href='#' class='upvote_post' rel='XXX'></a>
{ ... some immensely great post content goes here ... }
</div>
<强> JS 强>
$('.upvote_post').click(function() {
var post_id = this.getAttribute('rel');
// or var post_id = $(this).parents('div').getAttr('id').match(/\d+$/);
$.post(some_url, /* data including post_id */)
}
答案 1 :(得分:1)
在Stack Overflow上,每个帖子都包含<input type="hidden" value="POSTID">
。单击一个投票按钮时,代码将寻找此输入元素,并发送一个AJAX请求以及此帖子ID。
您可以在此处查看相关代码:http://userscripts.org/scripts/review/125051
此用户脚本允许所有(包括未注册的)用户查看帖子的投票计数。为此,必须找到帖子ID和投票按钮。
剥离到裸骨(CSS除外),代码如下:
<input type="hidden" value="--post id--">
<div class="vote upvote"></div>
<div class="vote downvote"></div>
// Example using jQuery:
$('.upvote').click(function() {
var $this = $(this);
$.get('/vote', {
postId: $this.siblings('input[type="hidden"]').val(),
type: $this.hasClass('upvote') ? '+1' : '-1'
}, function(data) {
// do something with server's response.
});
});
答案 2 :(得分:0)
您可以迭代所有按钮并提高每个帖子的ID,或者他们已经拥有ID服务器端,但是您必须在创建时告诉您的脚本。