首页 > 解决方案 > 在codeigniter中从ajax解析数组多维到控制器?

问题描述

我有一个动态表,我想通过 ajax 发送控制器。我有这样的代码ajax:

$(".save").click(function(e){
    var items = new Array();
    $("#list-item tr.item").each(function () {
        $this = $(this)
        var ref_item_id = $this.find("#ref_item_id").val();
        var ref_pic_id = $this.find("#ref_pic_id").val();
        var price= $this.find("#price").val();
        var qty= $this.find("#qty").val();
        items.push({ ref_item_id : ref_item_id, ref_pic_id : ref_pic_id, price: price, qty : qty});
    });

    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: '<?php echo base_url("transac/save")?>',
        dataType: "json",
        data: JSON.stringify({'items': items }),
        success: function (data) {              
            var obj = $.parseJSON(data);
            alert(obj.lenth);
        },
        error: function (result) { alert(result); }
    });
})

现在,如何在控制器中获取数据并保存在表数据库中。我的控制器是这样的:

public function penjualan_save(){
    $items = $this->input->post("items");
    // next code ???
}

我希望你能帮助我。谢谢

标签: javascriptphpajaxcodeigniter

解决方案


首先,您不需要 JSON.stringify({'items': items }),只需使用:

data: {'items': items },

在您的控制器中,只需创建一个模型并将您的帖子数据传递给它,例如:

public function penjualan_save(){
    $items = $this->input->post("items");
    $this->load->model('model_name');
    $this->model_name->insert($items);
}

那么您需要为您的模型定义一个函数,如下所示:

public function insert($data)
{
    // if you didn't call database library in autoload.php
    $this->load->database();
    $this->db->insert_batch('mytable', $data);
}

推荐阅读