2016-09-01 3 views
1

서버 시간 생성기가있는 Express 서버가 있습니다. 생성 된 시간은 클라이언트 페이지 gtm.hbs으로 전송됩니다. 클라이언트 페이지에서 정기적으로 서버를 폴링하려면 어떻게합니까? 나는 아약스 해결책을 찾고있다.

module.exports = { 
    sendCurrentUTCTimeString: function(req, res, next) { 
     var currentUTCTime = new Date(); 
     var currentUTCHours = currentUTCTime.getUTCHours(); 
     var currentUTCMinutes = currentUTCTime.getUTCMinutes(); 
     var currentUTCSeconds = currentUTCTime.getUTCSeconds(); 

     currentUTCHours = (currentUTCHours < 10 ? "0" : "") + currentUTCHours; 
     currentUTCMinutes = (currentUTCMinutes < 10 ? "0" : "") + currentUTCMinutes; 
     currentUTCSeconds = (currentUTCSeconds < 10 ? "0" : "") + currentUTCSeconds; 
     currentUTCHours = (currentUTCHours == 24) ? "00" : currentUTCHours; 

     function pad(number, length) { 
      var str = "" + number; 
      while (str.length < length) { 
       str = '0' + str; 
      } 
      return str; 
     } 

     var offset = new Date().getTimezoneOffset(); 
     offset = ((offset < 0 ? '+' : '-') + pad(parseInt(Math.abs(offset/60)), 2) + pad(Math.abs(offset % 60), 2)); 
     offset = offset.match(/[\+-][0-9][0-9]/)[0]; 
     res.send({currentUTCTime: currentUTCTime, currentUTCHours: currentUTCHours, currentUTCMinutes: currentUTCMinutes, currentUTCSeconds:currentUTCSeconds, offset: offset}); 
    } 
} 

gettime.hbs 페이지 코드가 난 서버가 다음 네 개의 <span>의 채우기 폴링 것 페이지를 렌더링하고 싶어 여기

<script> 
    $(document).ready(function() { 
     setInterval(function() { 
      var currentUTCHours; 
      var currentUTCMinutes; 
      var currentUTCSeconds; 
      var offset; 
      $.get('/gettime', function(data) { 
       debugger; 
       console.log(data); 
       currentUTCHours = data.currentUTCHours; 
       currentUTCMinutes = data.currentUTCSeconds; 
       currentUTCSeconds = data.currentUTCMinutes; 
       offset = data.offset; 
       $('#currentUTCHours').text(currentUTCHours); 
       $('#currentUTCMinutes').text(currentUTCMinutes); 
       $('#currentUTCSeconds').text(currentUTCSeconds); 
       $('#offset').text(offset); 
      }); 

      console.log('currentUTCHours: ' + currentUTCHours); 
     }, 1500); 
    }); 
</script> 

currentUTCHours: <span id="currentUTCHours"></span><br> 
currentUTCMinutes: <span id="currentUTCMinutes"></span><br> 
currentUTCSeconds: <span id="currentUTCSeconds"></span><br> 
offset: <span id="offset"></span><br> 

입니다 : 여기

\routes\getTime.js에 저장되어있는 서버 측 코드의 서버 응답 값.

경로

서버를 연결하는 클라이언트는

app.get('/gettime', getTime.sendCurrentUTCTimeString); 
app.get('/gtm', function(req, res, next) { 
    res.render('gettime', {}); 
}); 
+1

모든 서버는 모든 응답과 함께'Date' 헤더를 보냅니다. 난 당신이 자신의 메커니즘을 롤링 대신 헤더 값을 사용하는 것이 좋습니다. – Tomalak

+0

익스프레스 앱에서 정기적으로 서버를 폴링하는 것은 Socket.io를 사용하여 클라이언트에 변경 사항을 푸시 할 때 매우 이상한 방법으로 보입니다. –

+0

동의 함. 그럼에도 불구하고 이것이 이것을 해결하는 데 필요한 방법이었습니다. 나는 내일 해결책을 게시 할 것입니다. –

답변

1
$('#currentUTCHours').text(currentUTCHours); 
$('#currentUTCSeconds').text(currentUTCSeconds); 

변경 볼 수 있도록 내부 $ 갔지() 할 수 있어야한다.

관련 문제