annotate DataTables-1.9.4/examples/server_side/pipeline.html @ 7:0f2b740536fb draft

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