2013-06-26 1 views
0

Вот что я получил:Как использовать метод setTimeout для обновления jTable после «x» количества секунд?

<body> 
     <div id="TableContainer"></div> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       $('#TableContainer').jtable({ 
        title: 'title', 
        actions: { 
         listAction: 'JSONServlet', 
        }, 
        ajaxSettings: { 
         type: 'POST', 
         dataType: 'json' 
        }, 
        fields: { 
         Id: { 
          key: true, 
          list: false 
         }, 
         Tag: { 
          title: 'Tag', 
          width: '40%' 
         }, 
         V: { 
          title: 'V', 
          width: '10%' 
         }, 
         S: { 
          title: 'S', 
          width: '10%' 
         }, 
         Timestamp: { 
          title: 'Timestamp', 
          width: '30%', 
          create: false, 
          edit: false 
         } 
        } 
       }); 
       $('#DeviceTableContainer').jtable('load'); 
     ///////  window.setTimeout("$('#DeviceTableContainer').jtable('reload')", 100); 
      }); 

     </script> 
    </body> 

Я использую jTable и все работает отлично, кроме моего метода SetTimeout. В firebug похоже, что он может сделать запрос дважды. Когда я получаю обычный запрос, а другой - из своего метода, я предполагаю, но после второго раза больше запросов. Я новичок в веб-разработке, поэтому, если бы вы могли дать мне краткое объяснение того, что я делаю неправильно, это тоже поможет.

+1

если Вы желаете его обновить каждые х секунд, то вам нужно setInterval или другой вызов SetTimeout в функции, которая вызывается с помощью SetTimeout. –

ответ

3

если Вы желаете его обновить каждые х секунд, то вам нужно setInterval или другой вызов SetTimeout в функции, которая вызывается с помощью SetTimeout

var timerID = setInterval("$('#DeviceTableContainer').jtable('reload')", 100); 

ИЛИ

var timerID = null; 
function doReload() { 
    $('#DeviceTableContainer').jtable('reload'); 
    timerID = setTimeout(doReload,100); 
} 

doReload(); 

использование timerID для сохраните ссылку на таймер и, если необходимо, отмените таймер, clearTimeout(timerID), clearInterval(timerID)

Хотя у вас есть e он вызывается каждые 0,1 секунды, так как число равно миллисекундам, так что это довольно быстро для совершения вызовов ajax.

+0

Это здорово, спасибо. – jeanqueq

0

Попробуйте (после 100мс):

window.setTimeout(function(){$('#DeviceTableContainer').jtable('reload');}, 100); 

Или это (каждые 100 мс):

window.setInterval(function(){$('#DeviceTableContainer').jtable('reload');}, 100); 
1

setTimeout только срабатывает один раз.

setInterval срабатывает несколько раз, пока вы не вызовете clearInterval