使用Codeigniter

时间:2015-10-28 15:10:07

标签: php jquery ajax codeigniter

我现在正在使用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(*),但它没有用。感谢!!!

1 个答案:

答案 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将投票给正确的图像。