Datatable Pipeline processing

Datatable Pipeline processing

prashant01prashant01 Posts: 1Questions: 0Answers: 0
edited April 2015 in Free community support

I am new to Datatable , and trying to use Pipelining data functionality. I am successfully getting the data from server side but it is not displaying in the datatable. Below is my code:

$.fn.dataTable.pipeline = function ( opts ) {
// Configuration options
var conf = $.extend( {
pages: 5, // number of pages to cache
url: '', // script url
data: null, // function or object with parameters to send to the server
// matching how ajax.data works in DataTables
method: 'GET' // Ajax HTTP method
}, opts );

// Private variables for storing the cache
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 ) {
        // API requested that the cache be cleared
        ajax = true;
        settings.clearCache = false;
    }
    else if ( cacheLower < 0 || requestStart < cacheLower || requestEnd > cacheUpper ) {
        // outside cached data - need to make a request
        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 )
    ) {
        // properties changed (ordering, columns, searching)
        ajax = true;
    }

    // Store the request for checking next time around
    cacheLastRequest = $.extend( true, {}, request );

    if ( ajax ) {
        // Need data from the server
        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;

        // Provide the same `data` options as DataTables.
        if ( $.isFunction ( conf.data ) ) {
            // As a function it is executed with the data object as an arg
            // for manipulation. If an object is returned, it is used as the
            // data object to submit
            var d = conf.data( request );
            if ( d ) {
                $.extend( request, d );
            }
        }
        else if ( $.isPlainObject( conf.data ) ) {
            // As an object, the data given extends the default
            $.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; // Update the echo for each response
        json.data.splice( 0, requestStart-cacheLower );
        json.data.splice( requestLength, json.data.length );

        drawCallback(json);
    }
}

};

// Register an API method that will empty the pipelined data, forcing an Ajax
// fetch on the next draw (i.e. table.clearPipeline().draw())
$.fn.dataTable.Api.register( 'clearPipeline()', function () {
return this.iterator( 'table', function ( settings ) {
settings.clearCache = true;
} );
} );

$(document).ready(function(){

            var table = $("#purchaseOrder").DataTable({

                       "bServerSide": true,
                "bProcessing": true,
                "bSort":true,

                "fnServerData": fnDataTablesPipeline,
                "scrollY": "300px",
                "scrollX": false,
                "ajax": $.fn.dataTable.pipeline( {
                    url: '/ibag/search/result.html',
                    pages: 15 // number of pages to cache
                } ),

    "aoColumns": [
                            { 
                                "data": "poNum",
                                "className": "poNum",
                                "orderable": true,
                                "searchable": true,
                                "render": function(data,type,row,meta)                            
                                {
                                    return '<a href="#" data-toggle="modal" data-target="#infoPurchaseOrder">' + row.poNum + '</a>'
                                }
                            },
                            {
                                "data": "customerID",
                                "orderable": true,
                                "searchable": true,
                                "render": function(data,type,row,meta)                            
                                {
                                    return '<a href="#" data-toggle="modal" data-target="#infoCustomer">' + row.customerID + '</a>'
                                }
                            },

                            { "data": "brID"},
                            { "data": "docNum"},

                            { 
                                "data": "sourceFilePath",
                                "orderable": true,
                                "searchable": true,
                                "render": function(data,type,row,meta)                            
                                {
                                    return '<a href='+row.sourceFilePath+' class="editSelected marginright10 fontsize14 greentxt" data-toggle="modal" data-target="#purchaseOrderModal"><i class="fa fa fa-file"></i></a>'
                                }
                            },                                
                            { 
                                "data": "destinationFilePath",
                                "className": "destinationFilePath",
                                "orderable": true,
                                "searchable": true,
                                "render": function(data,type,row,meta)                            
                                {
                                    return '<a href="#" class="editSelected marginright10 fontsize14 greentxt" data-toggle="modal" data-target="#purchaseOrderModal"><i class="fa fa fa-file"></i></a>'
                                }
                            }
                        ]
            });
           });
Please someone help me
This discussion has been closed.