J'utilise Datatables pour afficher des données tabulaires dans mon application Web et je les ai configurées pour utiliser le traitement côté serveur , c'est-à-dire interroger le serveur via AJAX pour obtenir des données filtrées. Je souhaite filtrer en fonction de paramètres supplémentaires propres à mon application, c'est-à-dire correspondant à certaines options utilisateur (par exemple, via une case à cocher dans l'interface utilisateur). Comment faire en sorte que DataTables transmette ces paramètres de filtre supplémentaires au serveur?
La solution consiste à utiliser l'option fnServerParams de DataTables, qui vous permet d'ajouter des paramètres personnalisés à envoyer dans le XMLHttpRequest envoyé au serveur. Par exemple:
$(document).ready(function() {
$('#example').dataTable({
"bProcessing": true,
"bServerSide": true,
"sAjaxSource": "/IndexXhr",
"fnServerParams": function (aoData) {
var includeUsuallyIgnored = $("#include-checkbox").is(":checked");
aoData.Push({name: "includeUsuallyIgnored", value: includeUsuallyIgnored});
}
});
});
Cette réponse est mise à jour pour la version 1.10.6
Ceci est maintenant possible avec l’option ajax .
Exemple de code
$table.dataTable({
"ajax": {
"url": "example.com/GetData",
"type": "POST",
"data": function(d) {
d.Foo = "bar";
d.Bar = "foo";
d.FooBar = "foobarz";
}
},
"serverSide":true,
});
Foo, Bar et FooBar seront affichés en tant que données de formulaire en tant que paramètres supplémentaires, ainsi que d’autres paramètres existants tels que dessiner, début, longueur, etc. afin que, en fonction de la langue de votre serveur, vous puissiez les lire en conséquence.
Dans un scénario réel, vous auriez probablement un bouton de recherche et une entrée, vous pouvez déclencher le processus de filtrage en appelant
var table = $table.DataTable();
table.ajax.reload();
lorsque le bouton est cliqué.
Enfin fait après des heures passées!
Je vais poster la méthode complète ici pour aider tout le monde.
Il faut utiliser l'option fnServerParams
, qui permet d'ajouter des paramètres personnalisés dans la requête XMLHttpRequest envoyée au serveur. Par exemple:
Voici le coffescript que j'ai utilisé:
jQuery ->
table = $('#logs').dataTable
bProcessing: true
bServerSide: true
sAjaxSource: $('#logs').data('source')
fnServerParams: (aoData) ->
applicationName = $("#applicationName").val()
aoData.Push
name: "applicationName"
value: applicationName
return
$("#applicationName").on "change", ->
table.fnDraw()
return
Mon fichier HTML contient l'élément d'entrée avec l'ID applicationName
. Notez l’élément fnDraw()
que j’ai utilisé pour activer la demande de mise à jour chaque fois que la valeur d’entrée change.
Cela a fonctionné pour moi
$(document).ready(function() {
table = $('#okmorders').DataTable( {
// "ajax": 'http://cdpaha2.dev/admin/organizations/okm_orders'
serverSide: true,
"paging": true,
"searching": false ,
// "info": false,
"bLengthChange": false,
// "iDisplayLength":50,
// "aaSorting": [],
// "oLanguage": { "sEmptyTable": "No orders present " } ,
"aoColumnDefs" : [
{ 'bSortable' : false, 'aTargets' : [ 6 ]}
],
// "fnServerParams": function (aoData) {
// aoData.Push({name: "includeUsuallyIgnored"});
// },
ajax: {
url: 'yoururl.json' ,
type: 'POST',
data:
{
'startDate':function(){return $("#startDate").val(); },
'endDate': function(){return $("#endDate").val(); } ,
'placedBy':function(){return $("#placedBy").val(); },
'customer_po': function(){return $("#customer_po").val(); } ,
'customer_ref': function(){return $("#customer_ref").val(); }
}
},
} );
Paramètre dynamique, celui-ci fonctionne pour moi, semble la meilleure solution
t = $("#tbl_SearchCustomer").DataTable({
processing: true,
serverSide: true,
info: true,
ajax: {
url: '../Data/SearchCustomer',
data: function (data) {
data.CustomerCategoryID = $("#CustomerCategoryID").val(); // dynamic parameter
delete data.columns;
}
},
deferRender: true,
columns: [
{ "data": "FullName" },
],
dom: 'lfrtip'
});