2014-06-30 12 views
9

Mam DataTable, który zainicjować tak:jak przekazać parametry na przeładowanie DataTables

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

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

później chciałbym zrobić

mytable.ajax.reload(); 

to działa dobrze, ale teraz jestem Chciałbym wysłać kilka parametrów w tym żądaniu. Te parametry, których potrzebuję tylko przy ponownym ładowaniu, a nie podczas inicjalizacji tabeli. Jak to zrobić? dziękuję!

+0

Czy w ogóle czytałeś dokumentację? Wygląda na to, że możesz użyć jednego z nich tuż przed przeładowaniem: http://datatables.net/reference/api/ajax.url() i http://datatables.net/reference/option/ajax.data – Ian

+0

Zrobiłem przeczytaj dokumentację, ale nie udało mi się znaleźć odpowiedzi. Nie chciałem zmieniać adresu URL, tylko parametry. I nie jestem pewien, czy użycie adresu URL, jak sugerujesz, pomaga mi w tym sensie, mimo że jest to rzeczywiście rozwiązanie. – BMF

+1

W zależności od tego, co rozumiesz przez "kilka parametrów", zmiana adresu URL była opcją (dodanie zapytania o znak zapytania). Ale jeśli chcesz przekazać dane w treści żądania POST, użyj mojego drugiego linku (http://datatables.net/reference/option/ajax.data) - jestem prawie pewien, że to o wiele lepszy przykład niż Odpowiedź została zaakceptowana i wydaje się, że dokładnie do tego, co próbujesz zrobić, a nie do hacky. – Ian

Odpowiedz

22

Opcja 1 - Użyj zdarzenia 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 
}); 

patrz tutaj http://datatables.net/reference/event/

Opcja 2 (korzystnie) - Wykorzystanie ajax.data funkcji.

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

Obie opcje dają identyczne wyniki. Twój serwer nie zauważy różnicy. Dodatkowe dane będą dodawane co każde table.ajax.reload(). Dodatkowe dane będą:

whateveryouwant razem z wartością elementu #someidhere i

anotherexample o wartości "kittens"

Wolę opcja 2, ponieważ jest to bardziej oczywiste, że dodatkowe dane są dodane na każde żądanie. Pierwsza opcja jest trochę podstępna i nie jest tak oczywista, jak sądzę, że ktoś czyta twój kod.

Powiązane problemy