CodeIgniter: передать массив Javascript из вида в контроллер, а затем хранить в базе данных

Я пытаюсь разместить массив javascript в функции контроллера в codeigniter, а затем сохранить его в базе данных через AJAX. У меня нет проблем при передаче одиночных значений, и это первый раз, когда я передаю массив.

Вот код

//JAVASCRIPT IN THE VIEW (students variable already populated and classCode already has a value)
$.ajax({
    traditional: true,
    type: 'POST',
    url: '<?php echo base_url(); ?>index.php/ams_controller/recordAbsence', 
    data: 'classCode='+classCode+'&students='+students, 
    success: function(resp) { 
        alert("Absences Saved");
    }
});


//CONTROLLER FUNCTION
public function recordAbsence() {
    $temp=getdate(date("U"));
    $date = $temp[month] ." ". $temp[mday] ." ". $temp[year];

    $classCode = $this->input->post('classCode');
    $students = $this->input->post('students');

    $this->load->model('model_users');
    if($this->model_users->recordAbsence($classCode, $students, $date)) {
        return true;
    } else{
        return false;
    }    
}

//MODEL FUNCTION
public function recordAbsence($classCode, $students, $date) {
    foreach($students as $row) {
        $data = array(
            'stud_no' => $row,
            'date_of_absence' => $date,
            'classCode' => $classCode
        );

        $query = $this->db->insert('absence', $data);
    }
    if($query) {
        return true;
    } else {
        return false;
    }
}

Данные не сохраняются в таблице отсутствия. Любая помощь будет оценена.

1 ответ

  1. Передать данные как объект:

    data: {classCode: classCode, students: students},
    

    Edit: кроме того, Google для существующего вопроса в разделе «jQuery ajax passing array» даст вам эту ссылку в качестве первой. Проверьте первые два ответа там тоже.

    Edit: 20160525171759

    Вы можете передать JSON stringified array JSON.stringify(array)и управлять им json_decode($this->input->post('postKey')).

    //JS
    
    //students = ["2014-52307", "2014-26571", "2014-68959", "2014-60379", "2014-56077"];
    students = JSON.stringify(students);
    //check if same is needed for classCode variable since I don't know if classCode is array too
    $.ajax({
        //I removed traditional property to pass an object
        type: 'POST',
        //I put URI as method argument (check if index.php is sufficient)
        url: '<?php echo base_url("index.php/ams_controller/recordAbsence"); ?>', 
        data: {classCode: classCode, students: students}, 
        success: function(resp) { 
            alert("Absences Saved");
        }
    });
    
    //PHP
    $students = $this->input->post('students');
    //echo $students;