使用ajax更新购物车 - Codeigniter

时间:2015-01-24 11:11:36

标签: php ajax codeigniter

我使用ajax更新codeigniter cart

下面是我的代码

<script type="text/javascript">
$(function(){
    $('input[type=button]').click(function(){
        $.ajax({
            type: "POST",
            url: "<?php echo base_url()?>update-shopping-cart",
            data: $("#columnarForm").serialize(),
            beforeSend: function(){
                $('#result').html('<img src="<?php echo site_url('assets/images/loading.gif'); ?>" class="center-block" />');
            },
            success: function(data){
                $('#result').html(data);
            }
        });
    });
});
</script>  

我的控制器

// Updated the shopping cart
        function updateCart(){
        $data = array(
               'rowid'   => $this->input->post('rowid'),
               'qty'     => $this->input->post('qty'),
        );

        // Update the cart with the new information
        $this->cart->update($data);
        redirect(base_url().'update-cart-view');
        }

我的问题是当我在购物车中添加多件商品时更新数量不变的项目数量。它仅适用于最后添加的项目。

请帮忙。

2 个答案:

答案 0 :(得分:0)

行ID问题。 您需要在购物车中找到该产品的行ID 然后更新

答案 1 :(得分:0)

请确保在更新购物车中的特定商品时抓取正确的rowid,因为当有多个商品时,您无法确定要更新的ID,否则会更新每个商品的数量。

当您更新购物车时,首先需要从视图中传递如下所示的rowid

    <?php if($cart=$this->cart->contents()):?>
    <?php foreach ($cart as $item): ?>
    <input type="hidden" name='' id='rowid' value='<?=$item['rowid']?>'>
<ul>
<li><?=$item['name']?></li>
</ul>

    <?php endforeach ?>
    <?php endif;?>
<script>
    $(document).ready(function(){
        var rowid=$("#rowid").val();
        $("#addToCart").click(function(){
        $("#result").show();
            $.ajax({
            type: "POST",
            url: "<?=base_url()?>shop/update",
            data: {"rowid":rowid},
            dataType: "json",
            beforeSend: function(){
                $('#result').html('<img src="<?=base_url()?>assets/images/ajax-loader.gif" class="center-block" />');
            },
            success: function(data){
                alert("done! here update your cart items as per data received with jquery using .html tag");
                $("#result").hide();
            },
            error: function(data){
     alert("inside error");
            }
        });
        });
        })

</script>                               

我观察到的第二件事是你在控制器中更新后重定向,但是当你重定向时,ajax不起作用,ajax只是执行查询并返回,所以在你的控制器中请执行以下操作。

public function update(){
        $rowid=$this->input->post('rowid');
        $cart=$this->cart->contents();
        foreach ($cart as $cart) {
//now match your item whose qty is updated
              if($rowid==$cart['rowid']){
            $qty=$cart['qty'];
        }
        }

                  $data=array(
                        'rowid'=>$rowid,
                        'qty'=>$qty+1
                        );
                  $data=$this->cart->update($data);
                  echo json_encode($data);
}

希望这适合你。