2014-10-18 28 views
0

我正在制作一个类似的系统,并且正在合并ajax以使其平滑。一切正常,除了它总是默认为for循环中的最后一个帖子。我的想法是没有办法让JavaScript知道id“like”要发布到哪个元素。AJAX-在后期获得特定的数组值

main.js:

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

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

     alert('liked'); 

    }, "json"); 

    return false; 

}); 

林通过从视图文件后变量。我抓住每个帖子的帖子ID。

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); 
} 

如果有人couldhelp我走出这将是伟大的!

+0

什么'POST'单击处理程序...你需要分享更多背景是 – 2014-10-18 03:50:36

+0

的变量im在视图 – Divergent 2014-10-18 03:53:39

+0

中指定是否$(“。like> a”)。click(function(){'在循环中完成? – 2014-10-18 03:54:07

回答

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; 

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

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

取而代之的是,将设置在每<a>标签的id属性是$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值分配给它......我没有看到代码示例中包含该部分。

+0

是的,我该如何解决这个问题 – Divergent 2014-10-18 04:01:53

0

如果你发送相同的ID字段值不同停止,发送唯一的ID与选择的OR值与值后阵列在发送ID,PHP可以对付它