包含onclick事件的jQuery ajax循环仅更改最后一次出现

时间:2011-11-06 22:34:36

标签: ajax arrays jquery for-loop

我的页面显示存储在我的数据库中的帖子,并将喜欢/不喜欢的按钮配对到每个帖子。 我试图这样做,以便当用户点击喜欢或不喜欢时,该值将被发送到我的数据库以供以后回忆。

我有一个复杂的循环,我希望解释一下: 在页面加载时,对外部php文件进行ajax调用以从我的数据库中获取数据。结果是一个对象数组,其中包含" postID":value。在for循环中,我将值存储在var postID中以便于访问。我显然是错误的,因为代码确实执行了,但是只发送循环中最后一次出现的值和postID,无论我按下哪一对按钮:如果我的数据库中有11个帖子,我按"像"在第3篇文章中,它会存储价值'喜欢'但是对于第11条。如果我在第7条上按不喜欢,那么它将存储价值并且不喜欢'但是对于第11个帖子。

所以问题是,我如何解决这个问题,所以当我按照喜欢或不喜欢帖子x时,它会存储同一篇文章的值而不是我数据库中的最后一篇文章?

数组如下所示:

{"s":0,"d":[{"postID":"1"},{"postID":"2"},{""pos‌​tID":"3"},{""pos‌​tID":"4"},{""pos‌​tID":"5"},{""pos‌​tID":"6"},{""pos‌​tID":"7"},{""pos‌​tID":"8"},{""pos‌​tID":"9"},{""pos‌​tID":"10"},{""pos‌​tID":"11"}]}

帖子div的格式如下:

<div id="post_#"> //# representing the postID in the database
    <div id="like_#"></div> //# repesenting the postID in the database
    <div id="dislike_#"></div> //# representing the postID in the database
</div>

我的jQuery(仅包含类似按钮):

$(document).ready(function() {
    $.ajax({
        url: 'postID.php', //fetch the above array
        type: 'POST',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        async: true,
        cache: false,
        success: function (post) {
                    if (post.s == 0) {
                    //Loop through returned data array using: post.d
                        for (var key in post.d) {
                            var obj = post.d[key];
                            for (var prop in obj) {
                                var postID = obj[prop];

                                //When like button is clicked do this
                                $('#like_' + postID).click(function() {

                                    // Declare variables
                                    var value = '1';

                                    // Send values to database
                                    $.ajax({
                                        url: 'check.php', //check.php receives the values sent to it and stores them in the database
                                        type: 'POST',
                                        data: 'postID=' + postID + '&value=' + value,
                                        success: function(result) {
                                            $('#Message_'+ contestID).html('').html(result).prependTo('#post_' + postID);
                                        }
                                    });
                                 });
                             }
                         }
                     }
                  }
     });
});

所以再一次,我的问题是第二个ajax循环只发送var postID的最后一个实例,而不是发送实际点击的帖子的postID。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

*更新为使用.on()而不是.live(),因为它自1.7以来已弃用 试试这个:

HTML

<div id="post_#" class="post"> //# representing the postID in the database
    <div id="like_#" class="like">test</div> //# repesenting the postID in the database
    <div id="dislike_#" class="dislike"></div> //# representing the postID in the database
</div>

jquery的

$(document).ready(function() {

//When like button is clicked do this
$('.like').on('click', function() {

    var postID = $(this).attr('id').replace('like_', '');

    // Declare variables
    var value = '1';

    // Send values to database
    $.ajax({
        url: 'check.php',
        //check.php receives the values sent to it and stores them in the database
        type: 'POST',
        data: 'postID=' + postID + '&value=' + value,
        success: function(result) {
            $('#Message_' + contestID).html('').html(result).prependTo(this);
        }
    });
});

});

以下是示例http://jsfiddle.net/TXwZk/

的链接