JavaScript - Ayuda a listar con datatable

 
Vista:
sin imagen de perfil
Val: 37
Ha disminuido su posición en 2 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda a listar con datatable

Publicado por Pepe (13 intervenciones) el 25/08/2020 21:07:42
Hola buenas, estoy mostrando unos datos, con datatable y tengo un error del cual puede ser cómo está planteada la lógica de mi aplicación.
Lo que pretendo hacer es listar unos datos de productos con datatable, y apartir de unos botones, listar otros datos distintos por la id de esos botones, estos botones, los genero mediante otro de forma dinámica.
La primera vez que listo los productos, me va bien, pero luego si pulso otra vez en el boton, como que se me borra la instancia de datatable. Dejo mi código a ver si alguien, me puede hecha una mano.
A lo mejor es que está planteada mi lógica, y se podría hacer de una forma mejor y más eficiente.

Los botones que se cargan

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<div class="container contenedorBtns">
<button id="btn" class="btn btn-info" type="button">Cargar Botones Del Menu</button>
<br>
<hr>
<dvi class="btn-group"></dvi>
 
</div>
<dvi class="contenidoBtns"></dvi>
 
</div>
 
<script>
const btns = `
    <br>
 
    <div class="btn-group">
    <button id="btnP0" class="btn btn-info" type="button">Por Precio</button>
    <button class="btn btn-info" type="button" id="btnP1">Por Tipo</button>
    <button class="btn btn-info" type="button"id="btnP2">Codigo</button>
    </div>
    <br>
    <hr>
        `;
 
    $("#btn").on('click', function(){
        $(".btn-group").empty();
        $(".btn-group").append(btns);
           //mediante el id del boton mostraré una lista u otra en la llamada al controlador
        $("button[type='button']").on('click', function(){
            let idBtns = this.id;
        $.ajax({
            url: "prueba/getProducts/"+idBtns,
            type: 'POST',
            dataType : 'html'
        }).done(function (e){
            $(".contenidoBtns").html(e);
        })
    })
    })
</script>


Metodo del controlador
1
2
3
4
5
6
7
8
9
10
function getProducts($idBtns = null){
        $datos[]=[];
        $datos['datosProducts'] = $this->consulta_model->getProducts();
        if($idBtns!== null){
                 //hacer switch case para las distintas vistas con las distintas listas
            $datos['datosProducts'] = $this->consulta_model->getProducts($idBtns);
        }
        $this->load->view('products', $datos);
 
    }
Metodo de mi modelo
1
2
3
4
5
6
7
8
function getProducts(){
//coger id del boton para aplicar un filtro
        $consulta = $this->db->query("SELECT * FROM products");
 
        if($consulta->num_rows() > 0){
            return $consulta->result_array();
        }
    }

La vista de los productos que es la que me está dando fallos, la primera vez me muestra bien el datatable, pero al pulsar otra vez en los botones, como que se crea de nuevo la instancia de la datatable y de la const idiomaES , y me da error, no se que podría ser, a lo mejor el planteamiento está mal. pues estas vistas se cargan por ajax,

Me da estos errores
error Uncaught SyntaxError: Identifier 'idiomaES' has already been declared
Failed to load resource: the server responded with a status of 404 (Not Found)
sort_asc.png:1 Failed to load resource: the server responded with a status of 404 (Not Found)
sort_desc.png:1 Failed to load resource: the server responded with a status of 404 (Not Found)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
<div class="container">
<table id="tablaPrueba" class="table table-striped table-inverse table-responsive">
    <thead class="thead-inverse">
        <tr>
            <th>Codigo Producto</th>
            <th>Nombre del Producto</th>
            <!-- <th>Descripción del Producto</th>
            <th>Precio del Producto</th> -->
        </tr>
        </thead>
        <tbody>
            <?php
                foreach($datosProducts as $producto){
            ?>
            <tr>
                <td scope="row"> <?php  echo $producto['productCode'] ?> </td>
                <td><?php  echo $producto['productName']  ?> </td>
                <!-- <td><?php  echo $producto['productDescription'] ?> </td>
                <td><?php  echo $producto['buyPrice']  ?> </td> -->
            </tr>
            <?php
                }
            ?>
        </tbody>
</table>
</div>
 
<script>
    $(document).ready( function () {
    $('#tablaPrueba').DataTable({
        "language": idiomaES
    });
} );
 
    const idiomaES = {
    "sProcessing":     "Procesando...",
    "sLengthMenu":     "Mostrar _MENU_ registros",
    "sZeroRecords":    "No se encontraron resultados",
    "sEmptyTable":     "Ningún dato disponible en esta tabla",
    "sInfo":           "Mostrando registros del _START_ al _END_ de un total de _TOTAL_ registros",
    "sInfoEmpty":      "Mostrando registros del 0 al 0 de un total de 0 registros",
    "sInfoFiltered":   "(filtrado de un total de _MAX_ registros)",
    "sInfoPostFix":    "",
    "sSearch":         "Buscar:",
    "sUrl":            "",
    "sInfoThousands":  ",",
    "sLoadingRecords": "Cargando...",
    "oPaginate": {
        "sFirst":    "Primero",
        "sLast":     "Último",
        "sNext":     "Siguiente",
        "sPrevious": "Anterior"
    },
    "oAria": {
        "sSortAscending":  ": Activar para ordenar la columna de manera ascendente",
        "sSortDescending": ": Activar para ordenar la columna de manera descendente"
    },
    "buttons": {
        "copy": "Copiar",
        "colvis": "Visibilidad"
    }
};
 
</script>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 37
Ha disminuido su posición en 2 puestos en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda a listar con datatable

Publicado por Pepe (13 intervenciones) el 27/08/2020 09:03:43
Ya encontré la solución, solo cambie la variable let por var y ya no me da problemas. Es una solución un poco tonta, pero me funciona si alguien sabe hacerlo mejor, en cuanto a la logica de la aplicación o como está planteada, me ayudaría mucho.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de joel
Val: 3.506
Oro
Ha mantenido su posición en JavaScript (en relación al último mes)
Gráfica de JavaScript

Ayuda a listar con datatable

Publicado por joel (895 intervenciones) el 27/08/2020 11:19:25
Gracias por comentarlo Pepe... ahora sabiendo la solución he podido ver el problema...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar