2014-06-30 17 views
9

Tôi đã một DataTable mà tôi khởi tạo như thế này:làm thế nào để vượt qua các thông số về tải lại datatables

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

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

sau, tôi muốn làm

mytable.ajax.reload(); 

Nó hoạt động tốt, nhưng bây giờ tôi d muốn gửi một vài tham số trong yêu cầu đó. Những thông số tôi chỉ cần tải lại, và không phải trong khởi tạo của bảng. Tôi làm như thế nào? cảm ơn bạn!

+0

Bạn đã đọc tài liệu chưa? Có vẻ như bạn có thể sử dụng một trong các quyền này trước khi bạn tải lại: http://datatables.net/reference/api/ajax.url() và http://datatables.net/reference/option/ajax.data – Ian

+0

Tôi đã làm đọc tài liệu, nhưng tôi không thể tìm thấy câu trả lời. Tôi không muốn thay đổi url, chỉ có các thông số. Và tôi không chắc liệu việc sử dụng url như bạn gợi ý có giúp tôi theo nghĩa đó hay không, mặc dù nó thực sự là một giải pháp. – BMF

+1

Tùy thuộc vào ý bạn là "một vài thông số", việc thay đổi URL là một tùy chọn (thêm chuỗi truy vấn). Nhưng nếu bạn muốn truyền dữ liệu trong phần thân của một yêu cầu POST, thì hãy sử dụng liên kết thứ hai của tôi (http://datatables.net/reference/option/ajax.data) - Tôi chắc chắn đó là một ví dụ tốt hơn nhiều so với trả lời bạn chấp nhận, và nó có vẻ là cho chính xác những gì bạn đang cố gắng để làm, không phải là một giải pháp hacky cho nó – Ian

Trả lời

22

Tùy chọn 1 - Sử dụng sự kiện 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 
}); 

thấy ở đây http://datatables.net/reference/event/

Lựa chọn 2 (ưu tiên) - Sử dụng chức năng 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 
}); 

Cả hai tùy chọn đều cho ra kết quả giống nhau. Máy chủ của bạn sẽ không biết sự khác biệt. Dữ liệu bổ sung sẽ được thêm vào mỗi table.ajax.reload(). Dữ liệu thêm được sẽ là:

whateveryouwant của với giá trị của phần tử #someidhere, và

anotherexample với giá trị "kittens"

tôi thích Lựa chọn 2, bởi vì nó rõ ràng hơn rằng dữ liệu thêm đang được được thêm vào mỗi yêu cầu. Tùy chọn đầu tiên là một chút lén lút và không hiển nhiên đối với người khác đọc mã của bạn mà tôi nghĩ.

Các vấn đề liên quan