Problème de pagination associé à la propriété dataSrc et à la source de données personnalisée

Je travaille avec jQuery DataTables et le mode de traitement côté serveur. Mais je suis confronté à un problème de table de données. J’ai tout recherché dans la documentation de Datatables mais je n’ai pas trouvé de réponse.

Le problème est que je reçois une réponse du serveur en JSON comme ceci:

Réponse JSON

Comme vous pouvez le constater dans cette réponse JSON, le fichier JSON requirejs dans data.data se trouve dans le data.data Pour définir cette source de données dans un fichier datatables, il existe une propriété qui est Custom Data Property . Elle fonctionne correctement et affiche les lignes. Le problème est que datatables n’envisage pas les parameters de pagination à partir de JSON. C’est pourquoi il montre ceci:

Pagination

Veuillez noter que je ne peux pas modifier la réponse JSON côté serveur.

Mise à jour: Voici le script d’appel js:

 $(document).ready(function () { $("#example").dataTable({ "ajax": { url: app.getApiUrlWithAccessToken('lead/get_all'), dataSrc: function(json){ return json.data.data; } }, "lengthMenu": [1,2,5,10,15], "columns": [ { "data": "first_name" }, { "data": "last_name" }, { "data": "title" }, { "data": "email" }, { "data": "city" }, { "data": "status" } ], "processing": true, "serverSide": true }); }); 

CAUSE

En mode de traitement côté serveur, DataTables attend une certaine structure dans les données renvoyées. Les parameters draw , recordsFiltered et recordsFiltered doivent être des propriétés de niveau supérieur. Votre réponse contient ces parameters en tant que sous-propriétés de data et non à l’endroit où DataTables les rechercherait.

SOLUTION

Définissez les parameters draw , recordsFiltered et recordsFiltered tant que propriétés de niveau supérieur de la réponse JSON là où DataTables les attend.

Utilisez le code suivant pour l’option ajax.dataSrc :

 dataSrc: function(json){ json.draw = json.data.draw; json.recordsTotal = json.data.recordsTotal; json.recordsFiltered = json.data.recordsFiltered; return json.data.data; } 

DEMO

Voir ce jsFiddle pour le code et la démonstration.