0

我有一个类似于我正在练习的 SO 克隆。我正在编写投票系统的代码。我希望当点击 upvote/downvote 按钮时,发送一个 Ajax 调用,其中包含处理页面的参数,其中包含帖子 ID 和值。

帖子需要能够知道在javascript调用的处理页面上记录哪个帖子

我有一个帖子表,每个帖子都有一个帖子 ID,还有一个投票表,投票表有一个投票 ID,所以在我的投票映射表中,我在帖子 ID 旁边记录了主题 ID。

但是,我无法弄清楚如何为每个不同帖子的 Ajax 调用动态地赋予不同的帖子 ID?我应该创建一个隐藏的字段吗?

这一般是怎么做的?非常感谢!

4

3 回答 3

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 */)
}
于 2012-02-26T13:05:50.153 回答
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.
    });
});
于 2012-02-26T12:55:22.663 回答
0

您可以遍历所有按钮并提高每个帖子的 id,或者它们已经具有服务器端的 id,但是您必须在创建时告诉您的脚本这些。

于 2012-02-26T12:55:36.730 回答