Невозможно передать данные массива из представления в контроллер с помощью AJAX - PullRequest
2 голосов
/ 24 мая 2019

Данные (массив массива) не передаются из представления в контроллер при использовании AJAX в CodeIgniter (PHP)

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 Ответ

1 голос
/ 24 мая 2019

Согласно вашему сценарию, это не будет data, это будет data_table

var data = {'data_table':table_data};

Таким образом:

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

Если это не сработает, пожалуйста, напишитеconsole.log вашего data var.

Обратите внимание: вам придется удалить echos до json_encode после того, как вы закончите устранение неполадок, иначе jquery не сможет проанализировать ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...