简体   繁体   中英

Using ajax to pass javascript array to a controller in codeigniter to use with a function

I have a form with a submit button. When clicked, it adds listed elements to an array.

$("#submitButton").click(function(){
    var selection = $("#selectedList li");
    var families_selection = [];
    selection.each(function() {
        families_selection.push($(this).text().replace(/Remove/,''));
    });
 });

I want to use the array "families_selection" in the controller "Provider", so I can use the following function and instert the values in a database.

$this->Proveedormodel->add_uk_proveedor_familia($idProveedor, $families_selection);

EDIT: I get the value for $idProveedor in the controller, not in the view, using another function in the same "Proveedor" model.

$idProveedor = $this->Proveedormodel->get_idConsecutivo();

This is how I insert the values in the database in my model.

function add_uk_proveedor_familia($id, $params){
    foreach($params as $clave){
        $this->db->select('id')->from('familia')->where('clave', $clave);
        $valor = $this->db->get();
        $vl = $valor->row_array();
        $familia = $vl['id'];
        $this->db->insert('relacionproveedorfamilia', array(
            'idProveedor' => $id,
            'idFamilia' => $familia
        ));
    }    
}

How can I use ajax to pass this array to the controller and use the function I need?

Edited code using Dragan Valjak's response. Now it works!

View add.php

$("#botonGuardar").click(function(){
    var seleccion = $("#listaSeleccion li");
    var familias_seleccion = [];

    seleccion.each(function() {
        familias_seleccion.push($(this).text().replace(/Quitar/,''));
    });

    $.ajax({
        url: 'Proveedor/crearRelacion',
        method: 'POST',
        data: {familias_seleccion: familias_seleccion}
    });
});

Controller Proveedor.php

function crearRelacion(){
    $this->load->model('Proveedormodel');
    $familias_seleccion = $this->input->post($data);
    $idProveedor = $this->Proveedormodel->get_idConsecutivo();
    $this->Proveedormodel->add_uk_proveedor_familia($idProveedor, $familias_seleccion);
}

Model Proveedormodel.php

function add_uk_proveedor_familia($id, $params){
    foreach($params as $clave){
        $this->db->select('id')->from('familia')->where('clave', $clave);
        $valor = $this->db->get();

        $vl = $valor->row_array();
        $familia = $vl['id'];

        $this->db->insert('relacionproveedorfamilia', array(
            'idProveedor' => $id,
            'idFamilia' => $familia
        ));
    }    
}

You create your route to handle the ajax, something like '/family_selection' then you can pass your data that you have stored in a post method such as:

$.ajax({
    url: '/family_selection',
    method: 'POST',
    data: {family_data: variable_of_data_you_stored}
});

I'm not familiar with codeigniter but I think you would need to set up a route "something like" $route['family_selection']['post'] = '/family_selection';

In python I would set it up in my controller like so: Maybe you can use it as an example and implement something similar in codeigniter

 @root_resource.route('/family_selection', methods=['POST'])
 def family_selection():
     family_details = request.form['family_data']
     #then I would do whatever it is I want to do with the data...
     #then I may or may not want to return an empty response.
     return Response(status=http.HTTPStatus.NO_CONTENT)

concentrate on your requirement id and family_data

     $.ajax({
                    url: "Proveedormodel/add_uk_proveedor_familia",
                    type: 'POST',
                    data:
                    {
                     family_data: variable_of_data_you_stored, //the data that you want to pass..

                     },
                    success: function(response)
                    {

                        console.log(response);


                    }
                  });

In model file: Proveedormodel and function add_uk_proveedor_familia() this changed ur params with family_data

function add_uk_proveedor_familia($id, $params){
$params=$_POST['family_data'];
    foreach($params as $clave){
        $this->db->select('id')->from('familia')->where('clave', $clave);
        $valor = $this->db->get();
        $vl = $valor->row_array();
        $familia = $vl['id'];
        $this->db->insert('relacionproveedorfamilia', array(
            'idProveedor' => $id,
            'idFamilia' => $familia
        ));
    }    
}

here in family_data your passing with large data if your params is the same as family_data then use use post value of family_Data into it.

$.ajax({
    url: 'Provider/functionName',
    method: 'POST',
    data:
         {
         families_selection: families_selection
         }
});

In Controller

function functionName($data){
    $families_selection = $this->input->post($data);
    $idProveedor = $this->Proveedormodel->get_idConsecutivo();
    $this->Proveedormodel->
    add_uk_proveedor_familia($idProveedor,$families_selection);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM