无法使用AJAX将数组数据从视图传递到控制器

时间:2019-05-24 10:12:16

标签: php jquery arrays codeigniter

在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';
    }

}

错误:

  

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

1 个答案:

答案 0 :(得分:1)

根据您的脚本,它不会是data,而不会是data_table

var data = {'data_table':table_data};

因此:

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

如果这样不起作用,请发布您的console.log变量中的data

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