annotate DataTables-1.9.4/examples/server_side/pipeline.html @ 2:3c160414da2e default tip

initial upload
author shiltemann
date Thu, 26 Feb 2015 14:05:23 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2
3c160414da2e initial upload
shiltemann
parents:
diff changeset
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
2 <html>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
3 <head>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
4 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
3c160414da2e initial upload
shiltemann
parents:
diff changeset
5 <link rel="shortcut icon" type="image/ico" href="http://www.datatables.net/media/images/favicon.ico" />
3c160414da2e initial upload
shiltemann
parents:
diff changeset
6
3c160414da2e initial upload
shiltemann
parents:
diff changeset
7 <title>DataTables example</title>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
8 <style type="text/css" title="currentStyle">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
9 @import "../../media/css/demo_page.css";
3c160414da2e initial upload
shiltemann
parents:
diff changeset
10 @import "../../media/css/demo_table.css";
3c160414da2e initial upload
shiltemann
parents:
diff changeset
11 </style>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
12 <script type="text/javascript" language="javascript" src="../../media/js/jquery.js"></script>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
13 <script type="text/javascript" language="javascript" src="../../media/js/jquery.dataTables.js"></script>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
14 <script type="text/javascript" charset="utf-8">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
15 var oCache = {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
16 iCacheLower: -1
3c160414da2e initial upload
shiltemann
parents:
diff changeset
17 };
3c160414da2e initial upload
shiltemann
parents:
diff changeset
18
3c160414da2e initial upload
shiltemann
parents:
diff changeset
19 function fnSetKey( aoData, sKey, mValue )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
20 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
21 for ( var i=0, iLen=aoData.length ; i<iLen ; i++ )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
22 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
23 if ( aoData[i].name == sKey )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
24 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
25 aoData[i].value = mValue;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
26 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
27 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
28 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
29
3c160414da2e initial upload
shiltemann
parents:
diff changeset
30 function fnGetKey( aoData, sKey )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
31 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
32 for ( var i=0, iLen=aoData.length ; i<iLen ; i++ )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
33 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
34 if ( aoData[i].name == sKey )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
35 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
36 return aoData[i].value;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
37 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
38 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
39 return null;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
40 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
41
3c160414da2e initial upload
shiltemann
parents:
diff changeset
42 function fnDataTablesPipeline ( sSource, aoData, fnCallback, oSettings ) {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
43 var iPipe = 5; /* Ajust the pipe size */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
44
3c160414da2e initial upload
shiltemann
parents:
diff changeset
45 var bNeedServer = false;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
46 var sEcho = fnGetKey(aoData, "sEcho");
3c160414da2e initial upload
shiltemann
parents:
diff changeset
47 var iRequestStart = fnGetKey(aoData, "iDisplayStart");
3c160414da2e initial upload
shiltemann
parents:
diff changeset
48 var iRequestLength = fnGetKey(aoData, "iDisplayLength");
3c160414da2e initial upload
shiltemann
parents:
diff changeset
49 var iRequestEnd = iRequestStart + iRequestLength;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
50 oCache.iDisplayStart = iRequestStart;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
51
3c160414da2e initial upload
shiltemann
parents:
diff changeset
52 /* outside pipeline? */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
53 if ( oCache.iCacheLower < 0 || iRequestStart < oCache.iCacheLower || iRequestEnd > oCache.iCacheUpper )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
54 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
55 bNeedServer = true;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
56 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
57
3c160414da2e initial upload
shiltemann
parents:
diff changeset
58 /* sorting etc changed? */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
59 if ( oCache.lastRequest && !bNeedServer )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
60 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
61 for( var i=0, iLen=aoData.length ; i<iLen ; i++ )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
62 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
63 if ( aoData[i].name != "iDisplayStart" && aoData[i].name != "iDisplayLength" && aoData[i].name != "sEcho" )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
64 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
65 if ( aoData[i].value != oCache.lastRequest[i].value )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
66 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
67 bNeedServer = true;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
68 break;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
69 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
70 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
71 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
72 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
73
3c160414da2e initial upload
shiltemann
parents:
diff changeset
74 /* Store the request for checking next time around */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
75 oCache.lastRequest = aoData.slice();
3c160414da2e initial upload
shiltemann
parents:
diff changeset
76
3c160414da2e initial upload
shiltemann
parents:
diff changeset
77 if ( bNeedServer )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
78 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
79 if ( iRequestStart < oCache.iCacheLower )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
80 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
81 iRequestStart = iRequestStart - (iRequestLength*(iPipe-1));
3c160414da2e initial upload
shiltemann
parents:
diff changeset
82 if ( iRequestStart < 0 )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
83 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
84 iRequestStart = 0;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
85 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
86 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
87
3c160414da2e initial upload
shiltemann
parents:
diff changeset
88 oCache.iCacheLower = iRequestStart;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
89 oCache.iCacheUpper = iRequestStart + (iRequestLength * iPipe);
3c160414da2e initial upload
shiltemann
parents:
diff changeset
90 oCache.iDisplayLength = fnGetKey( aoData, "iDisplayLength" );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
91 fnSetKey( aoData, "iDisplayStart", iRequestStart );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
92 fnSetKey( aoData, "iDisplayLength", iRequestLength*iPipe );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
93
3c160414da2e initial upload
shiltemann
parents:
diff changeset
94 oSettings.jqXHR = $.getJSON( sSource, aoData, function (json) {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
95 /* Callback processing */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
96 oCache.lastJson = jQuery.extend(true, {}, json);
3c160414da2e initial upload
shiltemann
parents:
diff changeset
97
3c160414da2e initial upload
shiltemann
parents:
diff changeset
98 if ( oCache.iCacheLower != oCache.iDisplayStart )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
99 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
100 json.aaData.splice( 0, oCache.iDisplayStart-oCache.iCacheLower );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
101 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
102 json.aaData.splice( oCache.iDisplayLength, json.aaData.length );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
103
3c160414da2e initial upload
shiltemann
parents:
diff changeset
104 fnCallback(json)
3c160414da2e initial upload
shiltemann
parents:
diff changeset
105 } );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
106 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
107 else
3c160414da2e initial upload
shiltemann
parents:
diff changeset
108 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
109 json = jQuery.extend(true, {}, oCache.lastJson);
3c160414da2e initial upload
shiltemann
parents:
diff changeset
110 json.sEcho = sEcho; /* Update the echo for each response */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
111 json.aaData.splice( 0, iRequestStart-oCache.iCacheLower );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
112 json.aaData.splice( iRequestLength, json.aaData.length );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
113 fnCallback(json);
3c160414da2e initial upload
shiltemann
parents:
diff changeset
114 return;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
115 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
116 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
117
3c160414da2e initial upload
shiltemann
parents:
diff changeset
118 $(document).ready(function() {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
119 $('#example').dataTable( {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
120 "bProcessing": true,
3c160414da2e initial upload
shiltemann
parents:
diff changeset
121 "bServerSide": true,
3c160414da2e initial upload
shiltemann
parents:
diff changeset
122 "sAjaxSource": "scripts/server_processing.php",
3c160414da2e initial upload
shiltemann
parents:
diff changeset
123 "fnServerData": fnDataTablesPipeline
3c160414da2e initial upload
shiltemann
parents:
diff changeset
124 } );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
125 } );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
126 </script>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
127 </head>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
128 <body id="dt_example">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
129 <div id="container">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
130 <div class="full_width big">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
131 DataTables server-side processing with pipelining example
3c160414da2e initial upload
shiltemann
parents:
diff changeset
132 </div>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
133
3c160414da2e initial upload
shiltemann
parents:
diff changeset
134 <h1>Preamble</h1>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
135 <p>When using server-side processing with DataTables, it can be quite intensive on your server having an Ajax call every time the user performs some kind of interaction - you can effectively DDOS your server with your own application!</p>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
136 <p>This example shows how you might over-come this by modifying the request set to the server to retrieve more information than is actually required for a single page's display. This means that the user can page multiple times (5 times the display size is the default) before a request must be made of the server. Paging is typically the most common interaction performed with a DataTable, so this can be most beneficial to your server's resource usage. Of course the pipeline must be cleared for interactions other than paging (sorting, filtering etc), but that's the trade off that can be made (sending extra information is cheap - while another XHR is expensive).</p>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
137
3c160414da2e initial upload
shiltemann
parents:
diff changeset
138 <h1>Live example</h1>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
139 <div id="dynamic">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
140 <table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
141 <thead>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
142 <tr>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
143 <th width="20%">Rendering engine</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
144 <th width="25%">Browser</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
145 <th width="25%">Platform(s)</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
146 <th width="15%">Engine version</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
147 <th width="15%">CSS grade</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
148 </tr>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
149 </thead>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
150 <tbody>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
151 <tr>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
152 <td colspan="5" class="dataTables_empty">Loading data from server</td>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
153 </tr>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
154 </tbody>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
155 <tfoot>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
156 <tr>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
157 <th>Rendering engine</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
158 <th>Browser</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
159 <th>Platform(s)</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
160 <th>Engine version</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
161 <th>CSS grade</th>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
162 </tr>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
163 </tfoot>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
164 </table>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
165 </div>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
166 <div class="spacer"></div>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
167
3c160414da2e initial upload
shiltemann
parents:
diff changeset
168
3c160414da2e initial upload
shiltemann
parents:
diff changeset
169 <h1>Initialisation code</h1>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
170 <pre class="brush: js;">var oCache = {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
171 iCacheLower: -1
3c160414da2e initial upload
shiltemann
parents:
diff changeset
172 };
3c160414da2e initial upload
shiltemann
parents:
diff changeset
173
3c160414da2e initial upload
shiltemann
parents:
diff changeset
174 function fnSetKey( aoData, sKey, mValue )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
175 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
176 for ( var i=0, iLen=aoData.length ; i&lt;iLen ; i++ )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
177 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
178 if ( aoData[i].name == sKey )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
179 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
180 aoData[i].value = mValue;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
181 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
182 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
183 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
184
3c160414da2e initial upload
shiltemann
parents:
diff changeset
185 function fnGetKey( aoData, sKey )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
186 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
187 for ( var i=0, iLen=aoData.length ; i&lt;iLen ; i++ )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
188 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
189 if ( aoData[i].name == sKey )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
190 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
191 return aoData[i].value;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
192 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
193 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
194 return null;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
195 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
196
3c160414da2e initial upload
shiltemann
parents:
diff changeset
197 function fnDataTablesPipeline ( sSource, aoData, fnCallback ) {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
198 var iPipe = 5; /* Ajust the pipe size */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
199
3c160414da2e initial upload
shiltemann
parents:
diff changeset
200 var bNeedServer = false;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
201 var sEcho = fnGetKey(aoData, "sEcho");
3c160414da2e initial upload
shiltemann
parents:
diff changeset
202 var iRequestStart = fnGetKey(aoData, "iDisplayStart");
3c160414da2e initial upload
shiltemann
parents:
diff changeset
203 var iRequestLength = fnGetKey(aoData, "iDisplayLength");
3c160414da2e initial upload
shiltemann
parents:
diff changeset
204 var iRequestEnd = iRequestStart + iRequestLength;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
205 oCache.iDisplayStart = iRequestStart;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
206
3c160414da2e initial upload
shiltemann
parents:
diff changeset
207 /* outside pipeline? */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
208 if ( oCache.iCacheLower &lt; 0 || iRequestStart &lt; oCache.iCacheLower || iRequestEnd &gt; oCache.iCacheUpper )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
209 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
210 bNeedServer = true;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
211 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
212
3c160414da2e initial upload
shiltemann
parents:
diff changeset
213 /* sorting etc changed? */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
214 if ( oCache.lastRequest &amp;&amp; !bNeedServer )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
215 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
216 for( var i=0, iLen=aoData.length ; i&lt;iLen ; i++ )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
217 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
218 if ( aoData[i].name != "iDisplayStart" &amp;&amp; aoData[i].name != "iDisplayLength" &amp;&amp; aoData[i].name != "sEcho" )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
219 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
220 if ( aoData[i].value != oCache.lastRequest[i].value )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
221 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
222 bNeedServer = true;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
223 break;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
224 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
225 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
226 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
227 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
228
3c160414da2e initial upload
shiltemann
parents:
diff changeset
229 /* Store the request for checking next time around */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
230 oCache.lastRequest = aoData.slice();
3c160414da2e initial upload
shiltemann
parents:
diff changeset
231
3c160414da2e initial upload
shiltemann
parents:
diff changeset
232 if ( bNeedServer )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
233 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
234 if ( iRequestStart &lt; oCache.iCacheLower )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
235 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
236 iRequestStart = iRequestStart - (iRequestLength*(iPipe-1));
3c160414da2e initial upload
shiltemann
parents:
diff changeset
237 if ( iRequestStart &lt; 0 )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
238 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
239 iRequestStart = 0;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
240 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
241 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
242
3c160414da2e initial upload
shiltemann
parents:
diff changeset
243 oCache.iCacheLower = iRequestStart;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
244 oCache.iCacheUpper = iRequestStart + (iRequestLength * iPipe);
3c160414da2e initial upload
shiltemann
parents:
diff changeset
245 oCache.iDisplayLength = fnGetKey( aoData, "iDisplayLength" );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
246 fnSetKey( aoData, "iDisplayStart", iRequestStart );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
247 fnSetKey( aoData, "iDisplayLength", iRequestLength*iPipe );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
248
3c160414da2e initial upload
shiltemann
parents:
diff changeset
249 $.getJSON( sSource, aoData, function (json) {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
250 /* Callback processing */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
251 oCache.lastJson = jQuery.extend(true, {}, json);
3c160414da2e initial upload
shiltemann
parents:
diff changeset
252
3c160414da2e initial upload
shiltemann
parents:
diff changeset
253 if ( oCache.iCacheLower != oCache.iDisplayStart )
3c160414da2e initial upload
shiltemann
parents:
diff changeset
254 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
255 json.aaData.splice( 0, oCache.iDisplayStart-oCache.iCacheLower );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
256 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
257 json.aaData.splice( oCache.iDisplayLength, json.aaData.length );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
258
3c160414da2e initial upload
shiltemann
parents:
diff changeset
259 fnCallback(json)
3c160414da2e initial upload
shiltemann
parents:
diff changeset
260 } );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
261 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
262 else
3c160414da2e initial upload
shiltemann
parents:
diff changeset
263 {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
264 json = jQuery.extend(true, {}, oCache.lastJson);
3c160414da2e initial upload
shiltemann
parents:
diff changeset
265 json.sEcho = sEcho; /* Update the echo for each response */
3c160414da2e initial upload
shiltemann
parents:
diff changeset
266 json.aaData.splice( 0, iRequestStart-oCache.iCacheLower );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
267 json.aaData.splice( iRequestLength, json.aaData.length );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
268 fnCallback(json);
3c160414da2e initial upload
shiltemann
parents:
diff changeset
269 return;
3c160414da2e initial upload
shiltemann
parents:
diff changeset
270 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
271 }
3c160414da2e initial upload
shiltemann
parents:
diff changeset
272
3c160414da2e initial upload
shiltemann
parents:
diff changeset
273 $(document).ready(function() {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
274 $('#example').dataTable( {
3c160414da2e initial upload
shiltemann
parents:
diff changeset
275 "bProcessing": true,
3c160414da2e initial upload
shiltemann
parents:
diff changeset
276 "bServerSide": true,
3c160414da2e initial upload
shiltemann
parents:
diff changeset
277 "sAjaxSource": "scripts/server_processing.php",
3c160414da2e initial upload
shiltemann
parents:
diff changeset
278 "fnServerData": fnDataTablesPipeline
3c160414da2e initial upload
shiltemann
parents:
diff changeset
279 } );
3c160414da2e initial upload
shiltemann
parents:
diff changeset
280 } );</pre>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
281 <style type="text/css">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
282 @import "../examples_support/syntax/css/shCore.css";
3c160414da2e initial upload
shiltemann
parents:
diff changeset
283 </style>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
284 <script type="text/javascript" language="javascript" src="../examples_support/syntax/js/shCore.js"></script>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
285
3c160414da2e initial upload
shiltemann
parents:
diff changeset
286 <h1>Server response</h1>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
287 <p>The code below shows the latest JSON data that has been returned from the server in response to the Ajax request made by DataTables. This will update as further requests are made.</p>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
288 <pre id="latest_xhr" class="brush: js;"></pre>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
289
3c160414da2e initial upload
shiltemann
parents:
diff changeset
290
3c160414da2e initial upload
shiltemann
parents:
diff changeset
291 <h1>Other examples</h1>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
292 <div class="demo_links">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
293 <h2>Basic initialisation</h2>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
294 <ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
295 <li><a href="../basic_init/zero_config.html">Zero configuration</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
296 <li><a href="../basic_init/filter_only.html">Feature enablement</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
297 <li><a href="../basic_init/table_sorting.html">Sorting data</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
298 <li><a href="../basic_init/multi_col_sort.html">Multi-column sorting</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
299 <li><a href="../basic_init/multiple_tables.html">Multiple tables</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
300 <li><a href="../basic_init/hidden_columns.html">Hidden columns</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
301 <li><a href="../basic_init/complex_header.html">Complex headers - grouping with colspan</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
302 <li><a href="../basic_init/dom.html">DOM positioning</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
303 <li><a href="../basic_init/flexible_width.html">Flexible table width</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
304 <li><a href="../basic_init/state_save.html">State saving</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
305 <li><a href="../basic_init/alt_pagination.html">Alternative pagination styles</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
306 <li>Scrolling: <br>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
307 <a href="../basic_init/scroll_x.html">Horizontal</a> /
3c160414da2e initial upload
shiltemann
parents:
diff changeset
308 <a href="../basic_init/scroll_y.html">Vertical</a> /
3c160414da2e initial upload
shiltemann
parents:
diff changeset
309 <a href="../basic_init/scroll_xy.html">Both</a> /
3c160414da2e initial upload
shiltemann
parents:
diff changeset
310 <a href="../basic_init/scroll_y_theme.html">Themed</a> /
3c160414da2e initial upload
shiltemann
parents:
diff changeset
311 <a href="../basic_init/scroll_y_infinite.html">Infinite</a>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
312 </li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
313 <li><a href="../basic_init/language.html">Change language information (internationalisation)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
314 <li><a href="../basic_init/themes.html">ThemeRoller themes (Smoothness)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
315 </ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
316
3c160414da2e initial upload
shiltemann
parents:
diff changeset
317 <h2>Advanced initialisation</h2>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
318 <ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
319 <li>Events: <br>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
320 <a href="../advanced_init/events_live.html">Live events</a> /
3c160414da2e initial upload
shiltemann
parents:
diff changeset
321 <a href="../advanced_init/events_pre_init.html">Pre-init</a> /
3c160414da2e initial upload
shiltemann
parents:
diff changeset
322 <a href="../advanced_init/events_post_init.html">Post-init</a>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
323 </li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
324 <li><a href="../advanced_init/column_render.html">Column rendering</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
325 <li><a href="../advanced_init/html_sort.html">Sorting without HTML tags</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
326 <li><a href="../advanced_init/dom_multiple_elements.html">Multiple table controls (sDom)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
327 <li><a href="../advanced_init/length_menu.html">Defining length menu options</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
328 <li><a href="../advanced_init/complex_header.html">Complex headers and hidden columns</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
329 <li><a href="../advanced_init/dom_toolbar.html">Custom toolbar (element) around table</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
330 <li><a href="../advanced_init/highlight.html">Row highlighting with CSS</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
331 <li><a href="../advanced_init/row_grouping.html">Row grouping</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
332 <li><a href="../advanced_init/row_callback.html">Row callback</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
333 <li><a href="../advanced_init/footer_callback.html">Footer callback</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
334 <li><a href="../advanced_init/sorting_control.html">Control sorting direction of columns</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
335 <li><a href="../advanced_init/language_file.html">Change language information from a file (internationalisation)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
336 <li><a href="../advanced_init/defaults.html">Setting defaults</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
337 <li><a href="../advanced_init/localstorage.html">State saving with localStorage</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
338 <li><a href="../advanced_init/dt_events.html">Custom events</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
339 </ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
340
3c160414da2e initial upload
shiltemann
parents:
diff changeset
341 <h2>API</h2>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
342 <ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
343 <li><a href="../api/add_row.html">Dynamically add a new row</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
344 <li><a href="../api/multi_filter.html">Individual column filtering (using "input" elements)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
345 <li><a href="../api/multi_filter_select.html">Individual column filtering (using "select" elements)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
346 <li><a href="../api/highlight.html">Highlight rows and columns</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
347 <li><a href="../api/row_details.html">Show and hide details about a particular record</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
348 <li><a href="../api/select_row.html">User selectable rows (multiple rows)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
349 <li><a href="../api/select_single_row.html">User selectable rows (single row) and delete rows</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
350 <li><a href="../api/editable.html">Editable rows (with jEditable)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
351 <li><a href="../api/form.html">Submit form with elements in table</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
352 <li><a href="../api/counter_column.html">Index column (static number column)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
353 <li><a href="../api/show_hide.html">Show and hide columns dynamically</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
354 <li><a href="../api/api_in_init.html">API function use in initialisation object (callback)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
355 <li><a href="../api/tabs_and_scrolling.html">DataTables scrolling and tabs</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
356 <li><a href="../api/regex.html">Regular expression filtering</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
357 </ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
358 </div>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
359
3c160414da2e initial upload
shiltemann
parents:
diff changeset
360 <div class="demo_links">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
361 <h2>Data sources</h2>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
362 <ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
363 <li><a href="../data_sources/dom.html">DOM</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
364 <li><a href="../data_sources/js_array.html">Javascript array</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
365 <li><a href="../data_sources/ajax.html">Ajax source</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
366 <li><a href="../data_sources/server_side.html">Server side processing</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
367 </ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
368
3c160414da2e initial upload
shiltemann
parents:
diff changeset
369 <h2>Server-side processing</h2>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
370 <ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
371 <li><a href="../server_side/server_side.html">Obtain server-side data</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
372 <li><a href="../server_side/custom_vars.html">Add extra HTTP variables</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
373 <li><a href="../server_side/post.html">Use HTTP POST</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
374 <li><a href="../server_side/ids.html">Automatic addition of IDs and classes to rows</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
375 <li><a href="../server_side/object_data.html">Reading table data from objects</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
376 <li><a href="../server_side/row_details.html">Show and hide details about a particular record</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
377 <li><a href="../server_side/select_rows.html">User selectable rows (multiple rows)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
378 <li><a href="../server_side/jsonp.html">JSONP for a cross domain data source</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
379 <li><a href="../server_side/editable.html">jEditable integration with DataTables</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
380 <li><a href="../server_side/defer_loading.html">Deferred loading of Ajax data</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
381 <li><a href="../server_side/pipeline.html">Pipelining data (reduce Ajax calls for paging)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
382 </ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
383
3c160414da2e initial upload
shiltemann
parents:
diff changeset
384 <h2>Ajax data source</h2>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
385 <ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
386 <li><a href="../ajax/ajax.html">Ajax sourced data (array of arrays)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
387 <li><a href="../ajax/objects.html">Ajax sourced data (array of objects)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
388 <li><a href="../ajax/defer_render.html">Deferred DOM creation for extra speed</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
389 <li><a href="../ajax/null_data_source.html">Empty data source columns</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
390 <li><a href="../ajax/custom_data_property.html">Use a data source other than aaData (the default)</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
391 <li><a href="../ajax/objects_subarrays.html">Read column data from sub-arrays</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
392 <li><a href="../ajax/deep.html">Read column data from deeply nested properties</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
393 </ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
394
3c160414da2e initial upload
shiltemann
parents:
diff changeset
395 <h2>Plug-ins</h2>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
396 <ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
397 <li><a href="../plug-ins/plugin_api.html">Add custom API functions</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
398 <li><a href="../plug-ins/sorting_plugin.html">Sorting and automatic type detection</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
399 <li><a href="../plug-ins/sorting_sType.html">Sorting without automatic type detection</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
400 <li><a href="../plug-ins/paging_plugin.html">Custom pagination controls</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
401 <li><a href="../plug-ins/range_filtering.html">Range filtering / custom filtering</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
402 <li><a href="../plug-ins/dom_sort.html">Live DOM sorting</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
403 <li><a href="../plug-ins/html_sort.html">Automatic HTML type detection</a></li>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
404 </ul>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
405 </div>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
406
3c160414da2e initial upload
shiltemann
parents:
diff changeset
407
3c160414da2e initial upload
shiltemann
parents:
diff changeset
408 <div id="footer" class="clear" style="text-align:center;">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
409 <p>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
410 Please refer to the <a href="http://www.datatables.net/usage">DataTables documentation</a> for full information about its API properties and methods.<br>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
411 Additionally, there are a wide range of <a href="http://www.datatables.net/extras">extras</a> and <a href="http://www.datatables.net/plug-ins">plug-ins</a> which extend the capabilities of DataTables.
3c160414da2e initial upload
shiltemann
parents:
diff changeset
412 </p>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
413
3c160414da2e initial upload
shiltemann
parents:
diff changeset
414 <span style="font-size:10px;">
3c160414da2e initial upload
shiltemann
parents:
diff changeset
415 DataTables designed and created by <a href="http://www.sprymedia.co.uk">Allan Jardine</a> &copy; 2007-2011<br>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
416 DataTables is dual licensed under the <a href="http://www.datatables.net/license_gpl2">GPL v2 license</a> or a <a href="http://www.datatables.net/license_bsd">BSD (3-point) license</a>.
3c160414da2e initial upload
shiltemann
parents:
diff changeset
417 </span>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
418 </div>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
419 </div>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
420 </body>
3c160414da2e initial upload
shiltemann
parents:
diff changeset
421 </html>