如何获取javascript Ajax调用的post id?

时间:2012-02-26 12:51:07

标签: php javascript vote

我有一个类似于我正在努力练习的SO克隆。我正在编写投票系统。我希望当单击upvote / downvote按钮时,会发送一个Ajax调用,其中包含处理页面的参数,其中包含post id和value。

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

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

但是我无法弄清楚如何为每个不同的帖子动态地为Ajax调用提供不同的帖子ID?我应该创建一个隐藏的领域吗?

这是如何做到的?非常感谢!

3 个答案:

答案 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服务器端,但是您必须在创建时告诉您的脚本。