Вставка элементов в базу данных с помощью AJAX

Я пытаюсь обновить свою базу данных с помощью AJAX.

Это моя функция ajax

$(document).ready(function() {
  $('#submit').click(function (event) {
    event.preventDefault();

    if($('#category').val()===''){
        alert('Please enter a category name.')
    }
    else{
        var category = $('#category').val();
        var subcategory = $('#subcategory').val();

        alert(category);
        alert(subcategory);

        $.ajax({
            type: "POST",
            url: "Admin_controller/insertCategory",
            data:{ category:category, subcategory:subcategory },
            success: function(data) {
                alert('You can now add items.');
            }
        });
    }
  });
});

Вот мой Admin_controller

public function insertCategory(){
    $category = $this->input->post('category');
    $subcategory = $this->input->post('subcategory');

    $this->form_validation->set_rules('category', 'Category', 'required');
    $this->form_validation->set_rules('subcategory', 'Subcategory', 'required');

    if($this->form_validation->run() == FALSE){
        $this->load->view('ADMIN_ADDCategory');
    }
    else{
        $category_id = $this->admin_model->insertCategory($category);
        $this->admin_model->insertSubcategory($category_id, $subcategory);
    }
}

Вот моя модель

function insertCategory($category){
    $data = array(
        'category' => $category,
        'status' => 1
    );
    $this->db->insert('category', $data);
    $this->db->insert('category', $data);

    $id = $this->db->insert_id(): //assign the last inserted id to variable $id
    return $id;
}

function insertSubcategory($category_id, $subcategory){
    $data = array(
        'category_id' => $category_id,
        'subcategory' => $subcategory,
        'status' => 1
    );
    $this->db->insert('subcategory', $data);
}

Когда я нажимаю кнопку, которая должна запускать функцию AJAX, она показывает alert('You can now add items.');, но не обновляет мою базу данных моими требуемыми значениями.

я уже пробовал делать

var category = $('#category').val();
var subcategory = $('#subcategory').val();

alert(category);
alert(subcategory);

чтобы посмотреть, получает ли он мои входные данные, и да, это так. После предупреждения он просто обновляет мою страницу.

Что я делаю не так? Спасибо за помощь.


person Cronas De Se    schedule 01.02.2016    source источник


Ответы (2)


В вашем запросе ajax нет данных POST для отправки. Да, он делает POST-запрос к контроллеру, но данные не отправляются. В этом случае переменные категории и подкатегории в контроллере администратора будут ложными, что приведет к проблеме.

Вам нужно отправить категорию и подкатегорию в качестве данных в запросе AJAX:

В вашем коде JS вы не выполнили проверку, есть ли подкатегория или нет.

Кроме того, перед выполнением запроса AJAX вам нужно будет объявить две категории переменных и подкатегорию. Вот как будет выглядеть запрос AJAX (я не делал никаких проверок).

var category = $('#category').val();
var subcategory = $('#subcategory').val();

$.ajax({
    type: "POST",
    data:{ category:category, subcategory:subcategory},
    url: "<?=base_url()?>index.php/Admin_controller/insertCategory",
    success: function(data) {
        alert('You can now add items.');
    }
});

Кроме того, вы также можете оптимизировать свой код, изменив это в своей модели:

    $this->db->insert('category', $data);
    $this->db->select('id');
    $this->db->from('category');
    $this->db->where('category', $category);
    $this->db->limit(1);
    $query = $this->db->get();
    return $query->result();

в это:

    $this->db->insert('category', $data);

    return $this->db->insert_id();

Если есть сомнения, дайте мне знать.

person harkirat1892    schedule 01.02.2016
comment
Я сделал это, сэр, но даже при том, что он обновляет мою таблицу category, он не обновляет мою таблицу subcategory. Но в моих var category и var subcategory есть значения, когда я предупреждаю их. - person Cronas De Se; 03.02.2016
comment
$category_id будет иметь целое число, а не массив после использования insert_id. Вам нужно сделать следующее в контроллере администратора вместо использования $category_id[0]-›id. Используйте это: $this-›admin_model-›insertSubcategory($category_id, $subcategory); - person harkirat1892; 03.02.2016
comment
Да, я сделал это в своем Admin_controller. Но это все еще то же самое. Я обновлю свой пост относительно изменений, которые я сделал. - person Cronas De Se; 03.02.2016
comment
Просто чтобы вы знали, мои коды javascript не в моем представлении. Они находятся в отдельном файле js, который, на мой взгляд, импортируется. - person Cronas De Se; 03.02.2016

Изменения

  1. Неверный URL-адрес Ajax. И это изменилось
  2. В вашем ajax вы не передаете какие-либо почтовые значения контроллеру
  3. В модели добавлен последний идентификатор вставки вместо выбора
  4. Улучшены некоторые области

В Ajax

$(document).ready(function() {
    $('#submit').click(function(event) {
        event.preventDefault();
        if($('#category').val()==='' AND $('#subcategory').val() === ''){
            alert('Fields should not be empty')
        }
        else{
            var category = $('#category').val();
            var subcategory = $('#subcategory').val();
            $.ajax(
                {
                    type:"post",
                    url: "<?php echo base_url(); ?>index.php/Admin_controller/insertCategory",
                    data:{ category:category, subcategory:subcategory},
                    success:function(data)
                    {
                        alert('You can now add items.');
                    }
                }
            );
        }
    });
});

В модели

function insertCategory($category){
    $data = array(
        'category' => $category,
        'status' => 1
    );
    $this->db->insert('category', $data);

    $id = $this->db->insert_id(); # get last insert ID
    return  $id
}

function insertSubcategory($category_id, $subcategory){
    $data = array(
        'category_id' => $category_id,
        'subcategory' => $subcategory,
        'status' => 1
    );
    $this->db->insert('subcategory', $data);
}

Контроллер администратора

public function insertCategory(){
    $category = $this->input->post('category');
    $subcategory = $this->input->post('subcategory');

    $this->form_validation->set_rules('category', 'Category', 'required');
    $this->form_validation->set_rules('subcategory', 'Subcategory', 'required');

    if($this->form_validation->run() == FALSE){
        $this->load->view('ADMIN_ADDCategory');
    }
    else{
        $category_id = $this->admin_model->insertCategory($category);
        $this->admin_model->insertSubcategory($category_id, $subcategory);
    }
}
person Abdulla Nilam    schedule 01.02.2016
comment
Это больше похоже на большую игру «найди отличия», чем на ответ. Что вы изменили? Почему вы изменили его? - person Quentin; 01.02.2016
comment
@Quentin добавил журнал изменений. Спасибо (г) - person Abdulla Nilam; 01.02.2016
comment
Я сделал это, сэр, но проблема все еще существует. Я получаю значения от category и subcategory, и он все еще проходит через success:function(data), потому что он отображает `предупреждение('Теперь вы можете добавлять элементы.');`, но он по-прежнему не обновляет мои таблицы. - person Cronas De Se; 03.02.2016