首页 > 解决方案 > 无法使用 AJAX 将数组数据从视图传递到控制器

问题描述

在 CodeIgniter (PHP) 中使用 AJAX 时,数据(数组的数组)没有从视图传递到控制器

url 在 $.ajax 中工作。它正在重定向到控制器中的方法

view.php(视图)

$('#save').click(function(){
    var table_data = [];

    // use .each to get all data
    $('#data_table tr').each(function(row,tr){

        // create array again to store data by row
        // get only data with value 

        if ($(tr).find('td:eq(0)').text() == "") {
        } else {
        var sub = {
            'no' : $(tr).find('td:eq(0)').text(),
            'firstname' : $(tr).find('td:eq(1)').text(),
            'middle' : $(tr).find('td:eq(2)').text(),
            'last' : $(tr).find('td:eq(3)').text(),
        };

        table_data.push(sub);
    }
});

//use ajax to insert the data

console.log(table_data); 

var data = {'data_table':table_data};

console.log(data);

 $.ajax({
    data : data,
    type : 'POST',
    url : 'save',
    crossOrigin : false,
    dataType : 'array',
    success: function(msg){
        $('.answer').html(msg);
     }

}); 

Welcome.php(控制器)

public function save() {

    $relatives_list = $this->input->post('data'); 
    echo 'as';

    echo $relatives_list; 
    // the list is not shown here

    $this->load->model('Batch');
    $status = $this->Batch->save($relatives_list);

    $this->output->set_content_type('application/json');
    echo json_encode(array('status' => $status)); 
}

Batch.php(模型)

 public function save($relative_list){
$length = count($relative_list);

    for($x = 0; $x < count($relative_list); $x++){
        $data[] = array(
            'no' => $relative_list[$x]['no'],
            'firstname' => $relative_list[$x]['firstname'],
            'middle' => $relative_list[$x]['middle'],
            'last' => $relative_list[$x]['last'],

        );
    }
    try {


        for($x = 0; $x<count($relative_list); $x++){
            $this->db->insert('hhh',$data[$x]);
        }
        return 'success';
    }catch(Exception $e) {
         return 'failed';
    }

}

错误:

参数必须是一个数组或实现可数的对象

标签: phpjqueryarrayscodeigniter

解决方案


根据你的剧本,data它不会是data_table

var data = {'data_table':table_data};

因此:

var_dump($this->input->post('data_table')

如果这不起作用,请发布console.log您的datavar。

请注意:您必须在完成故障排除后删除echos之前的json_encode内容,否则 jquery 将无法解析响应。


推荐阅读