我现在正在使用CodeIgniter工作一段时间,而且我已经和问题争了好几天了。我在数据库中显示一系列图像,索引视图上有一个foreach循环,你可以喜欢或不喜欢每个图像,这很好用,问题是页面只显示一个图像的喜欢量。所以我认为解决方案是将数据发送到我的控制器上的公共函数index()
方法,然后在模型中进行查询并将所有内容返回到视图。你认为还有另一种方法可以解决这个问题吗?
这是我的ajax 请求
jQuery(document).ready(function($) {
var id = $("*#id_image").val();
$.ajax({
url: 'index.php/inicio/display_votes_index',
type: "POST",
dataType: "JSON",
data: {id_image: id},
success: function (response) {
$("#displayVote"+id).html(response.msg + " puntos");
console.log(response);
},
error: function (response) {
console.log(response);
}
});
});
这是我的视图
<aside class="container">
<div class="row col-md-8">
<?php
foreach ($images as $value) {
?><h1 style="font-size:20px;"><a href="#"><?= $value->title; ?></a></h1><?php
?><img src="<?= base_url(); ?>images/<?= $value->path; ?>" alt="<?= $value->title ?>" class="img-responsive" width="500"/>
<a href="#" style="color: #636363; margin-top:10px;display:block" id="displayVote<?= $value->id_image; ?>"></a><br/>
<button type="button" style="margin-right:5px;" class="btn btn-default btn-md" onclick="voteUp(<?= $value->id_image; ?>)"><i class="fa fa-arrow-up"></i></button>
<button type="button" style="margin-right:5px;" class="btn btn-default btn-md"><i class="fa fa-arrow-down"></i></button>
<button type="button" style="margin-right:5px;" class="btn btn-default btn-md"><span class="glyphicon glyphicon-comment"></span></button>
<input type="hidden" id="id_image" value="<?= $value->id_image; ?>"/>
<hr/>
<?php
}
?>
</div>
</aside>
这是模型
public function get_all_votes($id_image)
{
$sql = "SELECT COUNT(vote) AS vote_up FROM likes WHERE id_image = ? AND id_status = 1";
$query = $this->db->query($sql, $id_image);
$row = $query->row();
return $row->vote_up;
}
这是控制器接收数据
public function display_votes_index()
{
$id_image = $this->input->post('id_image');
$votes = $this->vote_model->get_all_votes($id_image);
if ($votes) {
echo json_encode(['success' => TRUE, 'msg' => $votes]);
} else {
echo json_encode(['success' => FALSE, 'msg' => 'Error']);
}
}
PD:如果我这样使用eq()
:var id = $("#id_image").eq(1).val();
页面显示循环中第二个图像的喜欢量,如果我更改数字则显示其他图像的喜欢。有没有办法选择所有图像的所有ID?我试过eq(*)
,但它没有用。感谢!!!
答案 0 :(得分:0)
将HTML上的隐藏字段更改为:
<input type="hidden" CLASS="id_image" id="id_image_<?= $value->id_image; ?>" value="<?= $value->id_image; ?>"/>
和JS:
jQuery(document).ready(function($) {
$(".id_mage").each(function(i) {
var id = $(this).val();
$.ajax({
url: 'index.php/inicio/display_votes_index',
type: "POST",
dataType: "JSON",
data: {id_image: id},
success: function (response) {
$("#displayVote"+id).html(response.msg + " puntos");
console.log(response);
},
error: function (response) {
console.log(response);
}
});
});
});
以上解决方案比ajax调用更多。所以最好的解决方案是使用一个ajax调用,模型将返回所有图像的所有投票。然后,js将投票给正确的图像。