kostenloser Webspace werbefrei: lima-city


Data Tables - Ajax Pipelining/Serverside funktioniert nicht!

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    master4860

    Kostenloser Webspace von master4860

    master4860 hat kostenlosen Webspace.

    Zuerst habe ich das css , die datatables.js und anschließend den ajax pipelining js code eingebaut.
    Danach habe ich meine Tabelle mit DataTables, entsprechend initialisiert, der Code:
    <link href="tablesorter/tablesortingStyle.css" rel="stylesheet" />
    <script type="text/javascript" src="tablesorter/jquery.dataTables.min.js"></script>
    <script type="text/javascript" language="javascript" class="init">
            $.fn.dataTable.pipeline = function ( opts ) {
                    var conf = $.extend( {
                            pages: 5,    
                            url: '',    
                            data: null,
                            method: 'GET'
                    }, opts );
                    var cacheLower = -1;
                    var cacheUpper = null;
                    var cacheLastRequest = null;
                    var cacheLastJson = null;
             
                    return function ( request, drawCallback, settings ) {
                            var ajax          = false;
                            var requestStart  = request.start;
                            var drawStart     = request.start;
                            var requestLength = request.length;
                            var requestEnd    = requestStart + requestLength;
                             
                            if ( settings.clearCache ) {
                                    ajax = true;
                                    settings.clearCache = false;
                            }
                            else if ( cacheLower < 0 || requestStart < cacheLower || requestEnd > cacheUpper ) {
                                    ajax = true;
                            }
                            else if ( JSON.stringify( request.order )   !== JSON.stringify( cacheLastRequest.order ) ||
                                              JSON.stringify( request.columns ) !== JSON.stringify( cacheLastRequest.columns ) ||
                                              JSON.stringify( request.search )  !== JSON.stringify( cacheLastRequest.search )
                            ) {
                                    ajax = true;
                            }
                            cacheLastRequest = $.extend( true, {}, request );
                            if ( ajax ) {
                                    if ( requestStart < cacheLower ) {
                                            requestStart = requestStart - (requestLength*(conf.pages-1));
             
                                            if ( requestStart < 0 ) {
                                                    requestStart = 0;
                                            }
                                    }
                                    cacheLower = requestStart;
                                    cacheUpper = requestStart + (requestLength * conf.pages);
                                    request.start = requestStart;
                                    request.length = requestLength*conf.pages;
                                    if ( $.isFunction ( conf.data ) ) {
                                            var d = conf.data( request );
                                            if ( d ) {
                                                    $.extend( request, d );
                                            }
                                    }
                                    else if ( $.isPlainObject( conf.data ) ) {
                                            $.extend( request, conf.data );
                                    }
                                    settings.jqXHR = $.ajax( {
                                            "type":     conf.method,
                                            "url":      conf.url,
                                            "data":     request,
                                            "dataType": "json",
                                            "cache":    false,
                                            "success":  function ( json ) {
                                                    cacheLastJson = $.extend(true, {}, json);
             
                                                    if ( cacheLower != drawStart ) {
                                                            json.data.splice( 0, drawStart-cacheLower );
                                                    }
                                                    json.data.splice( requestLength, json.data.length );
                                                     
                                                    drawCallback( json );
                                            }
                                    } );
                            }
                            else {
                                    json = $.extend( true, {}, cacheLastJson );
                                    json.draw = request.draw;
                                    json.data.splice( 0, requestStart-cacheLower );
                                    json.data.splice( requestLength, json.data.length );
             
                                    drawCallback(json);
                            }
                    }
            };
            $.fn.dataTable.Api.register( 'clearPipeline()', function () {
                    return this.iterator( 'table', function ( settings ) {
                            settings.clearCache = true;
                    } );
            });
     
            $(document).ready(function(){
                    // Login-Logs-Tabelle, wird mit DataTables initialisiert
                    $('#mylogins').dataTable({
                            "processing": true,
                            "serverSide": true,
                            "language": {
                                    "emptyTable":     "Keine Daten verfügbar.",
                                    "info":           "Zeige _START_ bis _END_ von _TOTAL_ Einträgen",
                                    "infoEmpty":      "Zeige 0 bis 0 von 0 Einträgen",
                                    "infoFiltered":   "(gefiltert von _MAX_ insgesamten Einträgen)",
                                    "infoPostFix":    "",
                                    "thousands":      ",",
                                    "lengthMenu":     "Zeige _MENU_ Einträge",
                                    "loadingRecords": "Lade...",
                                    "processing":     "Wird verarbeitet...",
                                    "search":         "Suche:",
                                    "zeroRecords":    "Keine passenden Einträge gefunden",
                                    "paginate": {
                                            "first":      "Erste",
                                            "last":       "Letzte",
                                            "next":       "Nächste",
                                            "previous":   "Vorherige"
                                    },
                                    "aria": {
                                            "sortAscending":  ": Aktivieren, um die Spalte aufsteigend zu sortieren",
                                            "sortDescending": ": Aktivieren, um die Spalte absteigend zu sortieren"
                                    }
                            },
                            "ajax": $.fn.dataTable.pipeline({
                                    url: 'tablesorter/serverside/loginlogs.php',
                                    pages: 5 // Seiten die gecached werden
                            })
                    });
            });
    </script>



    Das Serverseitige-Script sieht so aus:
    <?php
    // Datenbank-Tabelle, die verwendet wird
    $table = 'loginlogs';
     
    // Der Primary key, der Tabelle
    $primaryKey = 'id';
     
    // Array of database columns which should be read and sent back to DataTables.
    // The `db` parameter represents the column name in the database, while the `dt`
    // parameter represents the DataTables column identifier. In this case simple indexes.
    $columns = array(
        array( 'db' => 'ip', 'dt' => 0 ),
            array(
            'db'        => 'status',
            'dt'        => 1,
            'formatter' => function( $d, $row ) {
                if($d == 1){
                                    return "Erfolgreich";
                            }else{
                                    return "Fehlgeschlagen";
                            }
            }
        ),
            array(
            'db'        => 'stayloggedin',
            'dt'        => 2,
            'formatter' => function( $d, $row ) {
                            if($d == 1){
                                    return "Ja";
                            }else{
                                    return "Nein";
                            }
            }
        ),
        array(
            'db'        => 'date',
            'dt'        => 3,
            'formatter' => function( $d, $row ) {
                            return getonlydate($d);
            }
        ),
            array(
            'db'        => 'date',
            'dt'        => 4,
            'formatter' => function( $d, $row ) {
                            return getonlytime($d);
            }
        )
    );
     
    // SQL server connection information
    require('../../phpfuncs/connection.php');
    $sql_details = array(
        'user' => $user,
        'pass' => $pw,
        'db'   => $db,
        'host' => $host
    );
     
     
    require('ssp.class.php');
     
    echo json_encode(
        SSP::simple( $_GET, $sql_details, $table, $primaryKey, $columns )
    );
    ?>


    Zusammengefasst habe ich das entsprechende css, js und php Zeug eingebaut.
    Stellt sich also die Frage wieso es nicht funktioniert ... :frown:
    In der Console kriege ich keine Fehlermeldung, auf der Seite selbst auch nicht auch wenn ich alle Fehlermeldung im PHP Bereich einschalte. Auch die Sachen werden alle richtig eingebunden, sprich alle Pfadangaben sind korrekt.
    Im Netzwerkteil wird auch nichts mehr geladen... Es scheint alles zu funktionieren und dennoch geht es nicht.
    Wird verarbeitet... steht nun im Tabellen-Bereich und geht nicht mehr weg.

    Hat sich jemand schon mit DataTables auseinander gesetzt und sieht vll. was ich übersehen habe oder was ich eben falsch mache?

    Nebenbei bietet DataTables einen Debugger an, den Log könnt Ihr hier ansehen.

    Edit:
    Okay habe es gelöst. Leider wurde ja kein einziger Fehler in der Console angezeigt, aber der Fehler besteht darin dass ich vergessen hatte die functions.php zu includen daher konnten die Funktionen getonlydate() oder getonlytime() nicht aufgelöst werden.

    Naja seht es einfach als richtiges Beispiel für eine Verwendung von dem Plugin DataTables in einer Serverseitigen-Verwendung mit zuästzlichem Ajax-Pipelining, um den Server bei zick Anfragen nicht noch selbst zu ddosn :smile:

    Beitrag zuletzt geändert: 7.6.2014 23:22:43 von master4860
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!