AJAX-在post中获取特定的数组值

时间:2014-10-18 03:42:23

标签: javascript php jquery ajax

我正在制作一个类似的系统并且正在加载ajax以使其平滑。一切正常,但它总是默认为for循环中的最后一个帖子。我的想法是javascript无法知道哪个id“喜欢”发布到哪个元素。

main.js:

   $(".like>a").click(function() {

    $.post(base_url + "index.php/userprofile/like_post/", { post : post }, function(data) {

        alert('liked');

    }, "json");

    return false;

});

我从视图文件中传递post变量。我抓住每个帖子的postID。

userprofile_view.php:

            <?php foreach ($posts as $post) 
            { ?>
            <?php $postID = $this->model_posts->getPostData('id', $post->post); ?>
            <script type="text/javascript">
                var post = "<?php echo $postID; ?>";
                var base_url = "<?php echo base_url(); ?>";
            </script>   

model_posts.php:

function likePost($post) {
    $data['user_ID'] = $this->session->userdata('id');
    $data['post_liked'] = $post;

    $insert = $this->db->insert('user_post_likes', $data);
    return $insert;
}

userprofile.php(控制器):

    public function like_post() {
    $this->load->model('model_posts');

    $post = $this->input->post('post');

    $this->model_posts->likePost($post);
}

如果有人能帮助我,那就太棒了!

3 个答案:

答案 0 :(得分:1)

问题是你在循环中使用全局变量,因此变量只有循环的最后一个值。

您可以使用data-*属性,例如

<script type="text/javascript"> 
var base_url = "<?php echo base_url(); ?>"; 
</script>   

<?php foreach ($posts as $post) 
{ ?> 
<?php $postID = $this->model_posts->getPostData('id', $post->post); ?> 

<div class='posts'> 

<div class='posts_img'> 
<img src="<?php echo base_url() . 'img/profilepictures/thumbs/' . $profilepicture?>"> 
</div> 

<div class='posts_user'>    
<strong><?php echo $prefname; ?></strong>   
</div>  

<div class='posts_date'> 
<?php echo $this->model_posts->getPostTime($post->post); ?> 
</div> 

<div class='post'> 
<p><?php echo $post->post ?></p> 
</div> 

<?php if($this->model_posts->doesUserLike($me, $postID)) { ?> 
<div class='unlike'> 
<?php echo anchor('userprofile/unlike_post/' . $me . '/' . $postID, 'unlike'); ?> 
</div> 
<?php } else { ?> 
<div class='like' data-post="<?php echo $postID; ?>"> 
<?php echo anchor('#', 'like', array('id' => 'like')); ?> 
</div> 
<?php } ?>

然后

$(".like>a").click(function () {

    var post = $(this).parent().attr('data-post'); 
    $.post(base_url + "index.php/userprofile/like_post/", {
        post: post
    }, function (data) {

        alert('liked');

    }, "json");

    return false;

});

答案 1 :(得分:0)

<script type="text/javascript">
    var post = "<?php echo $postID; ?>";
    var base_url = "<?php echo base_url(); ?>";
</script>

这是你的问题。您在全球范围内声明这些变量。因此,每次PHP foreach循环迭代时,您都要在全局范围内重新定义变量,覆盖之前的值。

相反,在每个id标记上设置<a>属性为$postID,并在点击处理程序中获取该ID,如下所示:

$(".like>a").click(function() {
    var post = this.id;
    $.post(base_url + "index.php/userprofile/like_post/", { post : post }, function(data) {
        alert('liked');
    }, "json");

    return false;
});

您必须修改创建<a>代码的代码,以包含分配了id值的$postID属性...我不会看到部分包含在您的代码示例中。

答案 2 :(得分:0)

如果你发送具有不同值的相同ID字段停止,发送带有选定值的唯一ID或发送带有值作为post数组的ID,PHP可以处理它