Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Attivare Ajax in DataTables

    Salve,
    vedo sulla documentazione ufficiale che è possibile attivare Ajax, a me servirebbe per velocizzare l'output almeno della prima pagina della tabella in quanto attualmente impiega una decina di secondi per caricare la tabella quando si ci trova in determinate pagine del sito dove le righe sono circa 2.000 e le colonne circa 80, anche se inizialmente di colonne ne vengono visualizzate solo una decina..
    Come posso migliorare le prestazioni in apertura? L'implementazione di Ajax potrebbe bastare..?
    Grazie

  2. #2
    come ti ho già consigliato in un altro thread, si ti aiuta di sicuro.
    non carichi 2000 records tutti insieme.
    e carichi anche meno html (e datatables di html ne usa parecchio).

    quindi prepara lato server uno script che interroga il db, e manda i dati in formato json.
    poi prendi questa riga:
    codice:
    "ajax": '../ajax/data/arrays.txt'
    e ci metti il path del file php.

  3. #3
    ci sto combattendo anche io da un pò.
    se usi php per processare i dati, guarda qua: https://datatables.net/examples/server_side/simple.html

  4. #4
    Quindi in pratica invece di dargli l'output della tabella in html devo togliere tutto e creare un file PHP che mi genera un Json da cui il datatables andrà a prendersi i dati.. Giusto?
    Se è cosi, mi aspetta un bel lavoro.. Ci saranno circa 25 tabelle da generare..

  5. #5
    Quote Originariamente inviata da Luigi636 Visualizza il messaggio
    Quindi in pratica invece di dargli l'output della tabella in html devo togliere tutto e creare un file PHP che mi genera un Json da cui il datatables andrà a prendersi i dati.. Giusto?
    Se è cosi, mi aspetta un bel lavoro.. Ci saranno circa 25 tabelle da generare..
    si più o meno si.
    bhe cerca creare una funzione js parametrizzata, in cui magari indichi la tabella (SQL) da cui prendere i dati.

    cmq ho visto datables manda parecchi parametri in GET quando fa la richiesta.
    ti scrivo l'esempio php su cui sto lavorando.
    non funziona al 100%, ma domani continuo a lavorarci.

    questo il js:
    codice:
    function dtClassicAjax(id) {
        $(id).dataTable({
            "processing": true,
            "serverSide": true,
            "ajax": 'clienti.php'
        });
    }
    questo il php:
    Codice PHP:
        $start $_GET['start'];
        
    $length $_GET['length'];
        
    $draw $_GET["draw"];
        
    $orderByColumnIndex $_GET['order'][0]['column'];
        
    $orderBy $_GET['columns'][$orderByColumnIndex]['data'];
        
    $orderType $_GET['order'][0]['dir'];
    //    $cmd = 'SELECT * FROM clienti WHERE cliente_clde = "CL" ORDER BY ' . $orderBy . ' ' . $orderType . ' LIMIT ' . $start . ',' . $length;
        
    $cmd 'SELECT * FROM clienti WHERE cliente_clde = "CL" ORDER BY cliente_codice ' $orderType ' LIMIT ' $start ',' $length;

        
    $connessione Connessione::getInstance();
        
    $clienti = new Clienti($connessione);
        
    $columns = array(
            array(
    'db' => 'CODICE''dt' => 0),
            array(
    'db' => 'RAG SOC''dt' => 1),
            array(
    'db' => 'MENM''dt' => 2),
            array(
    'db' => 'PIVA''dt' => 3),
            array(
    'db' => 'EMAIL''dt' => 4),
            array(
    'db' => 'ATTIVO''dt' => 5)
        );
        
    $rows $clienti->getByTipoLimit($cmd);
        
    $out = array();
        foreach (
    $rows as $var) {
            
    $row = array();
            
    $row[$columns[0]['dt']] = $var['cliente_codice'];
            
    $row[$columns[1]['dt']] = $var['cliente_ragsoc'];
            
    $row[$columns[2]['dt']] = $var['cliente_mnemonico'];
            
    $row[$columns[3]['dt']] = $var['cliente_piva'];
            
    $row[$columns[4]['dt']] = $var['cliente_email'];
            
    $row[$columns[5]['dt']] = $var['cliente_attivato'];
            
    $out[] = $row;
        }
        
    $res = array(
            
    "draw" => $draw,
            
    "recordsTotal" => count($rows),
            
    "recordsFiltered" => count($rows),
            
    "data" => $out
        
    );
        echo 
    json_encode($res); 
    i GET arrivano in automatico da datatbles.
    questa la stringa di esempio che arriva al server:
    codice:
    http://.....?draw=1&columns[0][data]=0&columns[0][name]=&columns[0][searchable]=true&columns[0][orderable]=true&columns[0][search][value]=&columns[0][search][regex]=false&columns[1][data]=1&columns[1][name]=&columns[1][searchable]=true&columns[1][orderable]=true&columns[1][search][value]=&columns[1][search][regex]=false&columns[2][data]=2&columns[2][name]=&columns[2][searchable]=true&columns[2][orderable]=true&columns[2][search][value]=&columns[2][search][regex]=false&columns[3][data]=3&columns[3][name]=&columns[3][searchable]=true&columns[3][orderable]=true&columns[3][search][value]=&columns[3][search][regex]=false&columns[4][data]=4&columns[4][name]=&columns[4][searchable]=true&columns[4][orderable]=true&columns[4][search][value]=&columns[4][search][regex]=false&columns[5][data]=5&columns[5][name]=&columns[5][searchable]=true&columns[5][orderable]=true&columns[5][search][value]=&columns[5][search][regex]=false&order[0][column]=0&order[0][dir]=asc&start=0&length=10&search[value]=&search[regex]=false&_=1465832288870

  6. #6
    Che scocciatura.. Non so se lo farò.. Io ho più di 80 colonne in ogni pagina..!

  7. #7
    Quote Originariamente inviata da Luigi636 Visualizza il messaggio
    Che scocciatura.. Non so se lo farò.. Io ho più di 80 colonne in ogni pagina..!
    non sono un pò troppe?
    ti conviene tenerne alcune e poi usare un link per vedere il dettaglio del record?

  8. #8
    se può esserti utile, questo mi funziona alla perfezione.
    javascript:
    codice:
        $('#my_table').dataTable({
            // NOMI DEI CAMPI DELLE TABELLE SQL
            "columns": [
                {"data": "cliente_codice"},
                {"data": "cliente_ragsoc"},
                {"data": "cliente_mnemonico"},
                {"data": "cliente_piva"},
                {"data": "cliente_email"},
                {"data": "cliente_attivato"}
            ],
            "processing": true,
            "serverSide": true,
            "ajax": 'clienti_admin.php'
        });
    questo il php:
    Codice PHP:
    $connessione Connessione::getInstance();
        
    $clienti = new Clienti($connessione);
        
    // PRENDO IL NUMERO TOTALE DI RECORD PER PAGINAZIONE
        
    $recordsTotal count($clienti->getByTipo('CL'));

        
    // VARIABILI GET DA DATATABLES
        
    $columns $_GET['columns'];
        
    $search $_GET['search']['value'];
        
    $start $_GET['start'];
        
    $length $_GET['length'];
        
    $draw $_GET["draw"];
        
    $orderByColumnIndex $_GET['order'][0]['column'];
        
    $orderBy $_GET['columns'][$orderByColumnIndex]['data'];
        
    $orderType $_GET['order'][0]['dir'];

        
    // CONTROLLO SE LA CASELLA DI RICERCA È VUOTA
        
    if (!empty($search)) {
            for (
    $i 0$i count($columns); $i++) {
                
    $column $_GET['columns'][$i]['data'];
                
    $where[] = "$column like '%" $search "%'";
            }
            
    // CONCATENO LA WHERE
            
    $where "WHERE cliente_clde = 'CL' AND (" implode(" OR "$where) . ")";

            
    // QUERY SENZA LIMIT PER CONTARE IL NUMERO DI RECORD TROVATI
            
    $cmdNoLimit 'SELECT cliente_codice, cliente_ragsoc, cliente_mnemonico, cliente_piva, cliente_email, cliente_attivato ';
            
    $cmdNoLimit .= 'FROM clienti ' $where;
            
    $recordsFiltered count($clienti->getGeneric($cmdNoLimit));

            
    // QUERY CON WHERE E LIMIT
            
    $cmd 'SELECT cliente_codice, cliente_ragsoc, cliente_mnemonico, cliente_piva, cliente_email, cliente_attivato ';
            
    $cmd .= 'FROM clienti ' $where ' ORDER BY cliente_codice ' $orderType ' LIMIT ' $start ',' $length;
        } else {
            
    // QUERY SENZA FILTRI
            
    $cmd 'SELECT cliente_codice, cliente_ragsoc, cliente_mnemonico, cliente_piva, cliente_email, cliente_attivato ';
            
    $cmd .= 'FROM clienti WHERE cliente_clde = "CL" ORDER BY ' $orderBy ' ' $orderType ' LIMIT ' $start ',' $length;
            
    $recordsFiltered $recordsTotal;
        }

        
    // ESEGUO LA QUERY INVIATA COME STRINGA
        
    $rows $clienti->getGeneric($cmd);
        
    $data = array();
        foreach (
    $rows as $var) {
            
    $data[] = $var;
        }
        
    $res = array(
            
    "draw" => $draw,
            
    "recordsTotal" => $recordsTotal,
            
    "recordsFiltered" => $recordsFiltered,
            
    "data" => $data
        
    );
        echo 
    json_encode($res); 
    l'ho commentato per le info generiche.
    dovresti solo sostituire:
    - nel js i nomi dei campi delle tabelle
    - nel php le select e le funzioni per estrarre i dati dal db

    spero possa essere utile a qualcuno perchè alla fine non si è rivelato così banale.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.