2013-04-10 36 views
5

Tôi đang sử dụng datatables làm lưới của tôi trên webapp. Vấn đề là, người dùng phải làm mới trang luôn để lấy dữ liệu hiện tại từ cơ sở dữ liệu, có cách nào có thể thực hiện tự động không? bởi vì một số ứng dụng ghi vào cùng một bảng và webapp chỉ để theo dõi, nhưng nó đánh bại mục đích nếu người dùng phải làm mới trang để lấy dữ liệu hiện tại. đây là mã khởi tạo của tôi:cách cập nhật liên tục các datatables khi hồ sơ thay đổi trong cơ sở dữ liệu, một websockets hoặc thực hiện bỏ phiếu dài

$('.{{datatable['class']}}').dataTable({ 
       "sDom": 'T<"clear">lfrtip', 
       "oTableTools": { 
        "sSwfPath": "includes/swf/copy_csv_xls_pdf.swf",     
        "aButtons": [ 
         { 
          "sExtends":"copy", 
          "mColumns":[{{datatable['flds']}}] 
         }, 
         { 
          "sExtends":"csv", 
          "mColumns":[{{datatable['flds']}}] 
         }, 

         { 
          "sExtends":"xls", 
          "mColumns":[{{datatable['flds']}}] 
         },       
         { 
          "sExtends": "pdf", 
          "mColumns":[{{datatable['flds']}}], 
          "sPdfOrientation": "landscape", 
          "sPdfMessage": "{{datatable['title']}}" 
         } 
        ] 
        },   
       "bProcessing": true, 
       "bServerSide": true, 
       "sAjaxSource": "{{datatable['source']}}", 
       "aoColumns": [   
         {% for column in 0..datatable['columns']-2 %} 
         null, 
         {% endfor %} 
         null 
       ] 

     }); 

là có một cách danh sách có thể được cập nhật tự mỗi lần bất cứ điều gì (UPDATE/INSERT/DELETE) xảy ra với nguồn dữ liệu? tôi đã thực hiện một vòng lặp như Danny đề nghị,

var int=self.setInterval(function(){oTable.fnDraw();},1000); 

nhưng vấn đề là danh sách luôn là một trạng thái buồn cười, nhìn thấy hình ảnh attatched enter image description here

Trả lời

2

Bạn có thể có một yêu cầu ajax điều đó xảy ra trên một vòng lặp bởi một bộ đếm thời gian để kiểm tra xem liệu có dữ liệu mới từ trang cuối cùng nhận được bất kỳ thứ gì hay không. Bạn sẽ cần phải tìm ra những gì bạn có thể sử dụng để xác định số lượng bản ghi hoặc bản ghi chuyên dụng giữ ngày giờ cập nhật/thêm/xóa cuối cùng và nếu ngày giờ là mới hơn thì khi dữ liệu được cập nhật lần cuối cập nhật lại, v.v. Trên trang bạn sẽ ghi lại/cập nhật datetime của bản cập nhật dữ liệu cuối cùng trong một var javascript để sử dụng trên tất cả các kiểm tra trong tương lai.

+0

bạn có thể cho tôi ví dụ về vòng lặp này không? thứ hai tôi không thể sử dụng số lượng bản ghi vì hầu hết các thay đổi là bản cập nhật và cập nhật không thay đổi số lượng bản ghi. – indago

+0

@indago Ya có thể tạo một bảng hoặc tệp mới chỉ để lưu trữ khi lần chèn/cập nhật/xóa cuối cùng được thực hiện để sử dụng làm kiểm tra. – Danny

+0

http://www.w3schools.com/jsref/met_win_setinterval.asp Chỉ cần nhớ rằng nếu bạn đặt khoảng thời gian thực sự thấp, nó có thể cập nhật nhanh hơn nhưng nếu bạn có nhiều người dùng trên đó sẽ tạo nhiều yêu cầu http, có thể quá nhiều vì vậy bạn cần phải cân bằng khoảng thời gian để những gì máy chủ của bạn có thể xử lý dựa trên lưu lượng người dùng và số liệu thống kê máy chủ vv. – Danny