jQuery Datatables : la Recherche et le filtrage avec pagination Ajax
J'ai une table SQL avec 36000 entrées à montrer dans les tables de données de la liste.
La pagination fonctionne bien depuis que je la développe comme ceci :
var table = $('.datatable').DataTable({
pageLength : 20,
lengthChange : false,
processing : true,
serverSide : true,
ajax : {
url :"ajax.php",
type: "post",
}
});
Dans mon fichier ajax.php, j'ai simplement l'écho de mes lignes (JSON codés), en fonction de la limite fixée par le numéro de page.
Le problème est originaire de filtrage et de recherche ne fonctionne plus.
Quand je veux filtrer une colonne, le "Traitement" de la couche apparaît, puis disparaît, mais mes données " est toujours la même.
Quand je veux de la recherche par le biais de la table, rien ne se passe.
Donc, voici mes questions :
- Comment puis-je restaurer de filtrage et de recherche ?
- Comment puis-je filtrer et rechercher à travers toutes les lignes (pas seulement ceux qui sont montré) ? Avec Ajax, oui, mais comment en Jquery ?
Merci à l'avance
Edit :
Merci à Abdul Rehman Sayed, j'arrive à faire la recherche de la partie.
Voici ce que j'ai fait :
var table = $('.datatable').DataTable({
pageLength : 20,
lengthChange : false,
processing : true,
serverSide : true,
ajax : {
data : function(d) {
d.searching = get_search($('.datatable'));
},
url :"ajax.php",
type: "post",
},
searching : false,
});
$('.datatable thead th').each(function() {
var title = $(this).data('name');
$('.datatable').find('tfoot tr').append('<td><input type="text" name="'+title+'"/></td>');
});
table.columns().every(function() {
var that = this;
$('input', this.footer()).on('keyup', function(e) {
that.search(this.value).draw();
}
});
function get_search(datatable) {
var result = [];
datatable.find('tfoot').find('input').each(function() {
result.push([$(this).attr('name'), $(this).val()]);
});
return result;
}
Pour le filtrage, je développe une vilaine code :
$('.datatable').find('th').click(function() {
var item = $(this);
removeClasses($('.datatable'), item.index());
if(item.hasClass('sorting_asc')) {
item.removeClass('selected_asc').addClass('selected_desc');
} else {
item.removeClass('selected_desc').addClass('selected_asc');
}
});
function get_sorting(datatable) {
var result = false;
datatable.find('th').each(function() {
var item = $(this);
var name = item.data('name');
if(item.hasClass('selected_asc')) {
result = name+' ASC';
} else if(item.hasClass('selected_desc')) {
result = name+' DESC';
} else {
//continue
}
});
return result;
}
function removeClasses(datatable, index) {
datatable.find('th').each(function() {
if($(this).index() !== index) {
$(this).removeClass().addClass('sorting');
}
});
}
pouvez-vous s'il vous plaît lien le jsfiddle
OriginalL'auteur Pauloscorps | 2015-09-07
Vous devez vous connecter pour publier un commentaire.
Vous aurez à faire toute la recherche & le filtrage côté serveur.
Pour chaque demande de recherche/filtre ou d'une page, la datatable passe tous de ce que les données du formulaire au serveur de la page.
Reportez-vous https://www.datatables.net/manual/server-side
Vous aurez à utiliser ce formulaire de données à filtre/recherche/paginer sur les enregistrements de la table sql & pass en conséquence pour le client.
La datatable affiche simplement ce qu'il obtient à partir du serveur.
Il y a un serveur de script côté de php ici : datatables.net/examples/server_side/object_data.html
OriginalL'auteur Abdul Rehman Sayed