2015-03-06 3 views
8

Sto usando DataTable 1.10Aggiungi parametro alla chiamata AJAX DataTable prima di disegnare

Qualcuno sa come aggiungere dinamicamente un parametro per la chiamata AJAX prima table.draw() quindi la mia richiesta ha nuovi parametri? Ho cercato ovunque e non riesco a trovare una risposta.

I pulsanti che una persona può premere e in base a tale pulsante inviano parametri diversi al server.

$('#mytable').DataTable({ 
     iDisplayLength: 10, 
     responsive: true, 
     processing: true, 
     serverSide: true, 
     searching: false, 
     bLengthChange: false, 
     bProcessing: true, 
     paging: true, 
     ajax: { 
      url: me.url, 
      dataType: 'json', 
      cache:false, 
      type: 'GET', 
      data: function (d) { 
       $.extend(d, me.data); 
       d.supersearch = $('.my-filter').val(); 
      } 
     }, 
     columns: me.columns, 
     columnDefs: me.renderer, 
     initComplete: function() { 

     } 
    }); 

Questo funziona tutto bene, ma poi provo a legarlo a un pulsante per passare nuovi parametri.

$('.button').on('click', function(){ 
     var table = $('#mytable').DataTable(); 
     table.ajax.params({name: 'test'}); <- I want to do something like this 
     table.draw(); 
}) 
+0

Perché non utilizzare '$ _GET' sulla chiamata? Invia il parametro in '$ _GET' al server, e il server elabora di conseguenza. È difficile dire cosa stai chiedendo senza un esempio di codice. – Sablefoste

+0

Non sono sicuro di aver compreso la domanda, sto cercando di capire come inviare il parametro al server dopo che la tabella è stata inizializzata. – bstras21

+0

Anche in questo caso, fornire del codice .js per come si sta inizializzando il dataTable. Inoltre, sembra che tu stia utilizzando i dataTable legacy; troverete i nuovi DataTable più facili da usare. – Sablefoste

risposta

4

Ho modificato il codice per fare ciò che ti serve.

inizializzare una tabella di dati:

$('#mytable').DataTable({ 
    iDisplayLength: 10, 
    responsive: true, 
    processing: true, 
    serverSide: true, 
    searching: false, 
    bLengthChange: false, 
    bProcessing: true, 
    paging: true, 
    ajax: { 
     url: me.url, 
     dataType: 'json', 
     cache:false, 
     type: 'GET', 
     data: function (d) { 
      $.extend(d, me.data); 
      d.supersearch = $('.my-filter').val(); 

      // Retrieve dynamic parameters 
      var dt_params = $('#mytable').data('dt_params'); 
      // Add dynamic parameters to the data object sent to the server 
      if(dt_params){ $.extend(d, dt_params); } 
     } 
    }, 
    columns: me.columns, 
    columnDefs: me.renderer, 
    initComplete: function() { 

    } 
}); 

maniglia evento click su un pulsante:

NOTA: sto supponendo che questo è l'unico posto in cui si sarebbe aggiunta di parametri dinamici per chiamata AJAX.

$('.button').on('click', function(){ 
    // Set dynamic parameters for the data table 
    $('#mytable').data('dt_params', { name: 'test' }); 
    // Redraw data table, causes data to be reloaded 
    $('#mytable').DataTable().draw(); 
}); 
+0

Questo non ha funzionato neanche. Ho provato a cambiare me.data in table.data perché sono fuori portata, ma non andare. – bstras21

+0

cosa succede se voglio che il nuovo parametro venga classificato come oggetto vm personalizzato come secondo parametro di azione? –

1

mia via non è così bella, ma molto semplice e funziona alla grande: quando voglio passare parametri personalizzati mentre ridisegnare la DataTable, prima ho semplicemente cambiare il suo URL:

$('#table_id').DataTable().ajax.url('/custom/path/with/custom/parameters/inside/'); 
$('#table_id').DataTable().draw(); 

Quindi, se necessario, come primo passo della manifestazione "su draw.dt" cambio di nuovo al normale URL:

$('#table_id').on('draw.dt', function() { 
    $('#table_id').DataTable().ajax.url('/normal/path/for/ajax/source/'); 
    // ... 
)}; 

l'unico svantaggio di questo approccio che ha bisogno un po 'di trucco per spremere i parametri personalizzati in al percorso alternativo. Inoltre, ha bisogno di un po 'di lavoro sul lato server anche per preparare quel percorso alternativo e per estrarre quei parametri personalizzati da esso.