2015-10-28 61 views
0

我一直在使用CodeIgniter開展一段時間的項目工作,並且我一直在爭論幾天。我在索引視圖中顯示了一系列來自數據庫的圖像,並在索引視圖中顯示了每個圖像,並且您可以喜歡或不喜歡這些圖像,而且這種方式很好,問題是該頁面只顯示一張圖像的喜歡量。所以我想,解決方案是將數據發送到我的控制器上的公共功能index()方法,然後在模型中進行查詢,並返回所有視圖。你認爲還有另一種方法可以解決這個問題嗎?使用Codeigniter返回foreach循環中的所有圖像喜歡

這是我的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; 
} 

和這是控制器 recieving數據

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

更改隱藏字段的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會將投票投入正確的圖像。