使用 AJAX 将项目插入数据库

Insert items into database using 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);

查看它是否收到我的意见,是的。警报后它只是刷新我的页面。

我做错了什么?感谢您的帮助。

变化

  1. Ajax URL 是错误的。它的变化
  2. 在您的 ajax 中,您没有将任何 post 值传递给控制器​​
  3. 在模型中添加了最后一个插入 ID 而不是 select
  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);
}

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);
    }
}

您的 ajax 请求没有任何 POST 数据要发送。是的,它正在向控制器发出 POST 请求,但未发送任何数据。 在这种情况下,管理控制器中的类别和子类别变量将为假,从而导致问题。

您需要在 AJAX 请求中将类别和子类别作为数据发送:

在您的 JS 代码中,您没有验证子类别是否存在。

此外,在发出 AJAX 请求之前,您需要声明两个变量 category 和 subcategory。这就是 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();

如有任何疑问,请告诉我。