2014-06-30 9 views
9

ich eine Datentabelle, die ich wie folgt initialisieren:wie Parameter weitergeben reload von Datentabellen

mytable = DataTable({ 
     ajax:{ 
      url: "/url/getTableData", 
      dataSrc: "" 

     }, 
     sortClasses: false, 
     paging: false, 
     scrollY: 300, 
     columns: cols 
    }); 

später würde ich

mytable.ajax.reload(); 

Es funktioniert gut, tun aber jetzt ich Ich möchte einige Parameter in dieser Anfrage senden. Diese Parameter brauche ich nur beim Nachladen und nicht bei der Initialisierung der Tabelle. Wie mache ich das? danke!

+0

Haben Sie die Dokumentation überhaupt gelesen? Es sieht so aus, als könntest du beides benutzen, bevor du es neu lädst: http://datatables.net/reference/api/ajax.url() und http://datatables.net/reference/option/ajax.data – Ian

+0

tat ich lese die Dokumentation, aber ich konnte die Antwort nicht finden. Ich wollte die URL nicht ändern, nur die Params. Und ich bin mir nicht sicher, ob die Verwendung der URL, wie Sie es vorgeschlagen haben, mir in diesem Sinne hilft, obwohl es tatsächlich eine Lösung ist. – BMF

+1

Je nachdem, was Sie mit "einigen Parametern" meinten, war das Ändern der URL eine Option (Hinzufügen einer Querystring). Aber wenn Sie Daten im Körper einer POST-Anfrage übergeben möchten, dann verwenden Sie meinen zweiten Link (http://datatables.net/reference/option/ajax.data) - ich bin mir ziemlich sicher, dass das ein viel besseres Beispiel ist als die Antwort Sie akzeptiert, und es scheint für genau das, was Sie versuchen, zu tun, keine hacky Lösung – Ian

Antwort

22

Option 1 - Verwenden Sie das Ereignis preXhr.dt.

table = $('#example') 
    .on('preXhr.dt', function (e, settings, data) { 
     data.whateveryouwant = $("#someidhere").val() 
     data.anotherexample = "kittens" 
    }) 
// then just setup your datatable as normal 
    .DataTable({ 
     ajax:{ 
      url: "/url/getTableData", 
      type: "GET" // This is the default value, could also be POST 
     }, 
     sortClasses: false, 
     paging: false, 
     scrollY: 300, 
     columns: cols 
}); 

siehe hier http://datatables.net/reference/event/

Option 2 (bevorzugt) - eine ajax.data Funktion verwenden.

table = $('#example').DataTable({ 
    ajax:{ 
     url: "/url/getTableData", // Change this URL to where your json data comes from 
     type: "GET", // This is the default value, could also be POST, or anything you want. 
     data: function(d) { 
      d.whateveryouwant = $("#someidhere").val() 
      d.anotherexample = "kittens" 
     } 

    }, 
    sortClasses: false, 
    paging: false, 
    scrollY: 300, 
    columns: cols 
}); 

Beide Optionen liefern identische Ergebnisse. Ihr Server wird den Unterschied nicht kennen. Die zusätzlichen Daten werden bei jedem table.ajax.reload() hinzugefügt. Die zusätzlichen Daten werden:

whateveryouwant von mit dem Wert des #someidhere Element und

anotherexample mit dem Wert "kittens"

Ich ziehe die Option 2, weil es offensichtlich ist, dass zusätzliche Daten werden bei jeder Anfrage hinzugefügt. Die erste Option ist ein bisschen hinterhältig und nicht so offensichtlich für jemand anderen, der Ihren Code liest, denke ich.