2014-06-30 3 views
9

Ho un DataTable che ho inizializzare in questo modo:come passare parametri sulla ricarica della DataTable

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

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

dopo mi piacerebbe fare

mytable.ajax.reload(); 

Funziona bene, ma ora' Mi piacerebbe inviare alcuni parametri in quella richiesta. Quei parametri che mi servono solo per ricaricare e non per l'inizializzazione della tabella. Come faccio? grazie!

+0

Hai letto la documentazione? Sembra che tu possa utilizzare uno di questi diritti prima di ricaricare: http://datatables.net/reference/api/ajax.url() e http://datatables.net/reference/option/ajax.data – Ian

+0

ho fatto leggi la documentazione, ma non sono riuscito a trovare la risposta. Non volevo cambiare l'URL, solo i parametri. E non sono sicuro che usare l'url come mi hai suggerito mi aiuti in tal senso, sebbene sia, in effetti, una soluzione. – BMF

+1

A seconda di cosa intendevi per "alcuni parametri", la modifica dell'URL era un'opzione (aggiungendo una querystring). Ma se volessi passare i dati nel corpo di una richiesta POST, allora usa il mio secondo link (http://datatables.net/reference/option/ajax.data) - Sono abbastanza sicuro che sia un esempio migliore del la risposta è stata accettata, e sembra essere esattamente ciò che stai cercando di fare, non una soluzione hacky ad esso – Ian

risposta

22

Opzione 1 - Utilizzare l'evento 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 
}); 

Vedi qui http://datatables.net/reference/event/

Opzione 2 (preferito) - Utilizzare una funzione ajax.data.

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 
}); 

Entrambe le opzioni producono risultati identici. Il tuo server non conoscerà la differenza. I dati aggiuntivi verranno aggiunti su ogni table.ajax.reload(). I dati aggiuntivi saranno:

whateveryouwant di con valore dell'elemento #someidhere, e

anotherexample con il valore "kittens"

preferisco il Opzione 2, perché è più evidente che i dati in più è di essere aggiunto su ogni richiesta. La prima opzione è un po 'subdolo e non così ovvio per qualcun altro che legge il tuo codice, penso.