2015-03-06 13 views
8

zeichne ich Tables bin mit 1.10hinzufügen Parameter Datentabelle Ajax-Aufruf vor

Wer weiß, wie dynamisch ein Parameter an die Ajax-Aufruf vor table.draw hinzufügen(), um meine Anfrage neue Parameter hat? Ich habe überall gesucht und kann keine Antwort finden.

Ich habe Tasten, die eine Person drücken kann und basierend auf dieser Schaltfläche verschiedene Parameter an den Server senden.

$('#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() { 

     } 
    }); 

Das alles funktioniert gut, aber dann versuche ich es auf eine Schaltfläche zu binden neue Parameter zu übergeben.

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

Warum nicht '$ _GET' für den Anruf verwenden? Senden Sie den Parameter im '$ _GET' an den Server und der Server wird entsprechend verarbeitet. Es ist schwer zu sagen, was Sie ohne ein Codebeispiel fragen. – Sablefoste

+0

Ich bin mir nicht sicher, ob Sie die Frage verstehen, ich versuche herauszufinden, wie der Parameter nach der Initialisierung der Tabelle an den Server gesendet wird. – bstras21

+0

Geben Sie erneut einen .js-Code für die Initialisierung der dataTable ein. Außerdem scheint es, als ob Sie die alten Datentabellen verwenden. Sie werden feststellen, dass die neueren Datentables einfacher zu verwenden sind. – Sablefoste

Antwort

4

Ich habe Ihren Code geändert, um zu tun, was Sie brauchen.

eine Datentabelle initialisieren:

$('#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() { 

    } 
}); 

Griff Click-Ereignis auf einem Button:

HINWEIS: Ich gehe davon aus, dass dies der einzige Ort ist, wo Sie dynamische Parameter angeben würden, für AJAX-Anruf.

$('.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

Dies hat auch nicht funktioniert. Ich habe versucht, mich zu ändern.data zu table.data, weil ich außerhalb des Umfangs bin, aber nicht gehen. – bstras21

+0

Was ist, wenn ich will, dass der neue Parameter als benutzerdefiniertes vm-Objekt als zweiter Aktionsparameter gecropped wird? –

1

Mein Weg ist nicht so schön, aber sehr einfach und funktioniert gut: wenn ich benutzerdefinierte Parameter übergeben werden sollen, während die Datatable neu gezeichnet, zuerst habe ich einfach die URL ändern:

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

Wenn dann notwendig, als ersten Schritt des „auf draw.dt“ Ereignis, das ich es ändern, um die normale URL zurück:

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

der einzige Nachteil dieses Ansatzes, dass es einige Trick braucht die benutzerdefinierten Parameter zu quetschen zum alternativen Weg. Außerdem benötigt es serverseitige Arbeit, um diese alternative Route vorzubereiten und diese benutzerdefinierten Parameter daraus zu extrahieren.

Verwandte Themen