我正在制作一个类似的系统并且正在加载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);
}
如果有人能帮助我,那就太棒了!
答案 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可以处理它