데이터베이스에 저장된 날짜를 기준으로, ajax통신하여 실시간으로 팝업
본문
데이터베이스에 저장된 날짜를 기준으로, ajax통신하여 실시간으로 팝업이 뜨게끔 할 수 있을까요?
예를들어 데이터베이스에,
no name date memo
---------------------------------------------------
1 banana 2023-06-10 10:20:00 scal1
2 tomato 2023-06-13 11:10:00 scal1
3 apple 2023-06-17 14:15:00 scal1
값이 저장되있고, 오늘 날짜가 6월 13일 11시 00분 이라고 가정하게되면, 11시 10분인 데이터
2번 데이터베이스의 값을 10분전 즉 11시00분에 tomato라는 값이 웹브라우저상에 팝업으로 "tomato"라고뜨게끔 진행하려 하는데,
이게 ajax로 실시간으로 리플래시 없이 가능할지 여부판단이 좀 어려워서요.
답변 5
가능은 한데 자바스크립트 셋타임으로 일정 간격으로 체크를 하시면 될거 같습니다.
ajax 예제는 구글링 하시면 많은 자료가 나오니 그중 마음에 드시는거 쓰시면되고요
실시간은 ajax 가 아니라 node.js 같은거 쓰셔야 하는데
자바스크립트로도 몇초 간격으로 채크할수 있습니다. 약간의 딜레이는 있지만...
https://webisfree.com/2014-10-23/[%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8]-%EC%9D%BC%EC%A0%95-%EC%8B%9C%EA%B0%84%EB%A7%88%EB%8B%A4-%EB%B0%98%EB%B3%B5-%EC%8B%A4%ED%96%89%ED%95%98%EB%8A%94-%ED%95%A8%EC%88%98-setinterval()-%7B%7D
위 링크 참조하셔서 공부하시면 되겠습니다~
귀찮으시면 의뢰로~~
제가 로컬타임죤과 디비타임죤때문에 너무 고심해서 아래와 같은 함수 하나 만들어 애용하던거에요.
function convertLocalTimezone (dateObj){
var date = (dateObj)? dateObj : new Date();
var s = new Date(date.getTime() - (date.getTimezoneOffset() * 60000));
var d = s.toISOString();
var d1 = d.substring(0, 10);
var d2 = d1.split('-');
var d3 = d.substring(11, 19);
var d4 = d3.split(':');
var obj = {};
obj.full = s;
obj.fullDate = d1;
obj.year = d2[0];
obj.month = d2[1];
obj.date = d2[2];
obj.fullTime = d3;
obj.hour = d4[0];
obj.minute = d4[1];
obj.second = d4[2];
return obj;
}
let db_date = convertLocalTimezone(new Date('2023-06-13 11:10:00'));
let now = convertLocalTimezone();
if(now.fullDate == db_date.fullDate && now.hour == db_date.hour) {
if((db_date.minute-now.minute) <= 10 && (db_date.minute-now.minute) > 0) {
// 팝업창 현시
}
}
!-->
가능하지만 부하문제가 있는 비효율적인 방법이기 때문에 추천드리지는 않습니다.
호스팅을 이용하신다면 완벽하게 해당 시간대에 자동으로 스케쥴링 이벤트를 넣는건 어렵고
가상호스팅이나 기타 클라우드를 이용하신다면 crontab 이벤트를 적용해서 가능합니다
호스팅이라면 해당 테이블을 조회하는 함수를 만들어서 head.php 같은곳에 넣어서 사용자가 홈페이지를 사용할때 계속 실행되게 하는 방법으로 현재시간과 비교해서 표시할수 있습니다.
crontab을 사용하실 수 있다면 1시간 간격정도의 스케쥴링을 추가해서 마찬가지로 해당 함수를 자동으로 실행하게끔 하면 됩니다.