2011-04-15 23 views
20

Vì vậy, tôi có một bảng kéo thông tin từ một cơ sở dữ liệu và tôi đã tự hỏi làm thế nào tôi có thể làm cho nó làm mới thông tin của nó mà không cần tải lại toàn bộ trang.Làm mới một bảng với jQuery/Ajax cứ sau 5 giây

+0

Câu trả lời là trong câu hỏi: thêm một kịch bản tải lại dữ liệu bảng sử dụng AJAX mỗi 5 giây. Google cho hàm JavaScript setTimeout. –

+0

Làm cách nào để thiết lập chương trình phụ trợ của bạn? Bạn có dự định gọi một kịch bản như 'getData.php? StartID = 1 & endID = 10' loại điều? – Justin808

Trả lời

2

Đây là một tùy chọn khác để bạn sử dụng. Giải pháp này đang sử dụng một số IIFE được ưu tiên hơn setInterval. Bạn có thể đọc thêm về IIFE tại liên kết ở trên.

JAVASCRIPT:

var $results = $('#results'), 
    loadInterval = 5000; 
(function loader() { 
    $.get('script.php', function(html){ 
      $results.hide(200, function() { 
       $results.empty(); 
       $results.html(html); 
       $results.show(200, function() { 
        setTimeout(loader, loadInterval); 
       }); 
      }); 
    }); 
})(); 

HTML:

<div id="results"></div> 
+0

Xin chào, nhưng tôi thực sự không biết chức năng làm mới bảng. –

+0

@Etienne Dupuis Tôi nghĩ đưa ra một ví dụ tốt về cách lấy dữ liệu. –

+0

+1 tôi sau đó: P hah! –

6

Bạn nên có một trang mà trả lại thông tin và lấy dữ liệu sử dụng Ajax/jQuery.

<div class="result"></div> 

setInterval(function() { 

    $.get('test.php', function(data) { 
     $('.result').html(data); 
    }); 

}, 5000); 
+1

"Vấn đề" với giải pháp này là nó không bắt đầu hẹn giờ khi tải xong. Nói cách khác, nếu yêu cầu của bạn mất hơn 5 giây để trả lại, bạn sẽ có các yêu cầu ajax chồng lên nhau. Tôi đề nghị sử dụng '.abort()' trước khi bắt đầu một cuộc gọi mới. – Dutchie432

1
setTimeout(function(){ 

     jqueryFunction(Args); 

},100); 

sẽ làm việc ...

100 = 100 mili giây

33

Bạn sẽ cần một trang getTable.php hiển thị bảng của bạn, và không có gì khác: không có tiêu đề, footers, vv

PHP (getTable.php) - đây có thể là bất kỳ mã phía máy chủ nào (asp, html, v.v ..)

<?php 
    echo '<table><tr><td>TEST</td></tr></table>'; 
?> 

Sau đó, trong JS, bạn có thể dễ dàng làm mới bảng bằng cách sử dụng load() phương pháp:

HTML

<div id="tableHolder"></div> 

JS

<script type="text/javascript"> 
    $(document).ready(function(){ 
     refreshTable(); 
    }); 

    function refreshTable(){ 
     $('#tableHolder').load('getTable.php', function(){ 
      setTimeout(refreshTable, 5000); 
     }); 
    } 
</script> 
+1

Cảm ơn bạn rất nhiều, thậm chí có thể sử dụng khi sử dụng ASP (vì nó là trường hợp của tôi) – ArcDare

+1

Rất vui được trợ giúp !! – Dutchie432

+4

Trả lời tốt. Để giúp làm rõ, 1000 ms = 1 giây. Vì vậy: setTimeout (refreshTable, 5000); - làm mới bảng mỗi 5 giây. –

9

Sử dụng ajax , ví dụ sau là trong jQuery:

$(function() { 
    var prevAjaxReturned = true; 
    var xhr = null; 

    setInterval(function() { 
     if(prevAjaxReturned) { 
      prevAjaxReturned = false; 
     } else if(xhr) { 
      xhr.abort(); 
     } 

     xhr = $.ajax({ 
      type: "GET", 
      data: "v1="+v1+"&v2="+v2, 
      url: "location/of/server/script.php", 
      success: function(html) { 
       // html is a string of all output of the server script. 
       $("#element").html(html); 
       prevAjaxReturned = true; 
      } 

     }); 

    }, 5000); 
}); 

Hàm thành công giả định rằng tập lệnh máy chủ của bạn xuất ra html mà bạn muốn thay thế trong phần tử có id 'element'.

+2

"Vấn đề" với giải pháp này là nó không bắt đầu hẹn giờ khi tải xong. Nói cách khác, nếu yêu cầu của bạn mất hơn 5 giây để trả lại, bạn sẽ có các yêu cầu ajax chồng lên nhau. Tôi đề nghị sử dụng .abort() trước khi bắt đầu một cuộc gọi mới. – Dutchie432

+0

@Dutchie chính xác. Tôi đã cập nhật câu trả lời để phản ánh một giải pháp mạnh mẽ hơn. OP và những người khác quan tâm nên đọc câu trả lời này: http://stackoverflow.com/a/446626/697370 cho các giới hạn về 'abort' –

+0

Hoặc, bạn có thể sử dụng câu trả lời của tôi bên dưới, bắt đầu tự động hẹn giờ khi kết thúc ajax. – Dutchie432

1

Các công trình sau đây với JQuery Datatables 1,10

`var tableName; 
//Set AJAX Refresh interval. 
$(function() { 
    setReloadInterval(10); //Refresh every 10 seconds. 
} 

//Because function takes seconds we * 1000 to convert seconds to milliseconds. 
function setReloadInterval(reloadTime) { 
    if(reloadTime > 0) 
     internalId = setInterval("reloadTable()", (reloadTime * 1000); 
} 

//Auto Refresh JQuery DataTable 
function reloadTable() { 
    tableName.ajax.reload(); 
} 

//Table defined... 
$(document).ready(function() { 
    tableName = $('#tableName').DataTable({ 
     "sAjaxSource": "/someUrl", 
});` 
Các vấn đề liên quan