web-dev-qa-db-fra.com

Pagination côté serveur à l'aide du plug-in DataTables

Le serveur renvoie 15 enregistrements par page et le nombre total d'enregistrements est supérieur à 2000. J'aimerais afficher les 15 premiers enregistrements, puis à chaque clic du bouton "Suivant", afficher tous les enregistrements restants (15 par page). Pour cela faisons-nous une pagination côté serveur ou côté client ???

Voici ma table et les attributs que j'utilise pour la pagination dans DataTables :

  var tableData = self.accountCollection.getData();

        var tableColumns = this.accountCollection.getColumns();
        var totalRecs = this.accountCollection.length;

        //create the UI grid containing the list of items

        this.resultsTable = tableEl.dataTable( {
            "bServerSide": true,
            "sEcho": 3,
            "iTotalRecords": totalRecs,
            "iTotalDisplayRecords": 15,
            "aaData": tableData,
            "aoColumns": tableColumns,
            "aaSorting": [[1,'asc']],
           });



getData: function () {

        var returnData = [];
        $.each(this.models, function (idx, accountModel) {
            returnData.Push(accountModel.attributes);
        });
        return returnData;
    },

Le returnData me renverra un objet qui a des champs que je remplirai une table.

Objet retourné (grosso modo):

Object
 accountName: "No Company"
 address1: "1234 asdf"
  address2: ""
  billingAcctId: null
  billingSystem: null
  city: "mountain view"
  comments: null
   country: "USA"

La fonction getData () sera ensuite appelée pour renvoyer les données de la base de données en utilisant:

var tableData = this.accountCollection.getData()

Donc, fondamentalement, tableData aura les champs et les valeurs nécessaires à afficher dans le tableau. Maintenant, je peux avoir plus de 1000 enregistrements renvoyés par le serveur. Par conséquent, j'avais besoin de pagination.

Celui au violon est ce que j'ai essayé et n'a aucun impact sur la paginatine.

Je pense avoir la pagination de base qui vient avec les DataTables, mais maintenant je dois avoir un côté serveur, pour obtenir seulement 15 enregistrements à afficher à la fois, et en cliquant sur le bouton 'suivant' et 'précédent' je devrais pouvoir pour faire des appels ajax pour obtenir les 15 enregistrements restants par page.

J'espère que cela vous aide à mieux comprendre. Veuillez me faire savoir si vous avez besoin de plus de détails.

Comment puis-je obtenir la pagination en utilisant DataTables?

Merci

11
user1234

enter image description here

La pagination fonctionne l'enregistrement total affiché que vous devez effectuer après les modifications minimales.

"iTotalDisplayRecord" sera le nombre total d'enregistrements filtrés

4
Pranav Labhe

Cela recherche votre ruelle -> http://datatables.net/examples/data_sources/js_array.html C'est purement côté client

Bien que, pour autant que je sache, la seule façon d'obtenir une pagination réelle (ce qui la rend plus rapide parce que vous ne récupérez que 15 enregistrements à la fois dans la base de données) est d'ajaxer avec votre côté serveur (c'est-à-dire http : //datatables.net/examples/data_sources/server_side.html )

Il ne me semble pas que vous fassiez ça. Sauf si ... self.accountCollection.getData () est un rappel ajax, mais dans tous les cas, lorsque vous instanciez le DataTable, vous devez utiliser "ajax: tableData" et non "aaData: tableData".

Vous pouvez confondre le JSON renvoyé par les tables de données avec l'API de tables de données que vous utilisez pour interagir/initialiser avec la table de données.

Désolé, c'était un peu trop lol, est-ce que ça a du sens?

1
Jake Zieve