본문 바로가기

30초마다 동적으로 데이타 불러오기

반응형

data.php 파일을 30초마다 동적으로 불러오려면 JavaScript와 AJAX를 활용할 수 있습니다.

이를 통해 페이지를 새로고침하지 않고도 데이터를 주기적으로 업데이트할 수 있습니다.

아래는 구현 예제입니다.

HTML과 JavaScript 코드

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>동적 데이터 로드</title>
</head>
<body>
    <div id="data-container">
        <!-- data.php에서 불러온 데이터가 여기에 표시됩니다 -->
    </div>

    <script>
        function fetchData() {
            // AJAX 요청
            const xhr = new XMLHttpRequest();
            xhr.open("GET", "data.php", true);
            xhr.onload = function () {
                if (xhr.status === 200) {
                    // 성공적으로 데이터 수신
                    document.getElementById("data-container").innerHTML = xhr.responseText;
                } else {
                    console.error("데이터를 불러오는 데 실패했습니다.");
                }
            };
            xhr.onerror = function () {
                console.error("AJAX 요청 중 오류가 발생했습니다.");
            };
            xhr.send();
        }

        // 30초마다 fetchData 호출
        setInterval(fetchData, 30000);

        // 페이지 로드 시 첫 번째 호출
        fetchData();
    </script>
</body>
</html>

2. 작동 방식

  1. fetchData() 함수:
    • mem_new_on.php 파일에 GET 요청을 보냅니다.
    • 요청 성공 시 응답 데이터를 #data-container에 표시합니다.
  2. setInterval(fetchData, 30000):
    • 30초(30,000밀리초)마다 fetchData()를 호출하여 데이터를 동적으로 업데이트합니다.
  3. 페이지 로드 시 초기 데이터 로드:
    • fetchData()를 페이지 로드 시 한 번 실행하여 초기 데이터를 표시합니다.

 

JSON 형식으로 반환하는 것이 더 효율적일 수 있습니다. 클라이언트에서 데이터를 더 쉽게 처리할 수 있습니다.

JSON 형식으로 데이터를 반환하고 이를 클라이언트에서 처리하는 전체 코드를 자세히 작성해 보겠습니다.

1. 서버 측 파일 (PHP: data.php)

mem_new_on.php는 데이터를 JSON 형식으로 반환해야 합니다.

<?php
// 헤더 설정 (JSON 형식 반환)
header('Content-Type: application/json; charset=utf-8');

// 예제 데이터 배열
$data = [
    'status' => 'success',
    'timestamp' => date('Y-m-d H:i:s'),
    'new_members' => [
        ['id' => 1, 'name' => '홍길동', 'join_date' => '2024-12-01'],
        ['id' => 2, 'name' => '김영희', 'join_date' => '2024-12-02'],
        ['id' => 3, 'name' => '이철수', 'join_date' => '2024-12-03']
    ]
];

// JSON 형식으로 데이터 반환
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
?>

2. 클라이언트 측 파일 (HTML + JavaScript)

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>JSON 동적 데이터 로드</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            line-height: 1.6;
        }
        #data-container {
            margin: 20px 0;
            padding: 10px;
            border: 1px solid #ddd;
            background-color: #f9f9f9;
        }
    </style>
</head>
<body>
    <h1>회원 정보</h1>
    <div id="data-container">
        <!-- 데이터를 여기에 출력합니다 -->
        <p>데이터를 불러오는 중...</p>
    </div>

    <script>
        function fetchData() {
            // AJAX 요청 생성
            const xhr = new XMLHttpRequest();
            xhr.open("GET", "data.php", true);

            xhr.onload = function () {
                if (xhr.status === 200) {
                    try {
                        // JSON 데이터 파싱
                        const response = JSON.parse(xhr.responseText);

                        if (response.status === "success") {
                            // 데이터 렌더링
                            renderData(response);
                        } else {
                            document.getElementById("data-container").innerHTML = 
                                "<p>데이터를 불러오는 데 실패했습니다.</p>";
                        }
                    } catch (error) {
                        console.error("JSON 파싱 오류:", error);
                    }
                } else {
                    console.error("HTTP 오류:", xhr.status);
                }
            };

            xhr.onerror = function () {
                console.error("AJAX 요청 중 오류 발생");
            };

            xhr.send(); // 요청 전송
        }

        function renderData(data) {
            const container = document.getElementById("data-container");
            
            // 현재 시간 표시
            let html = `<p>업데이트 시간: ${data.timestamp}</p>`;

            // 회원 리스트 표시
            html += "<ul>";
            data.new_members.forEach(member => {
                html += `<li>ID: ${member.id}, 이름: ${member.name}, 가입일: ${member.join_date}</li>`;
            });
            html += "</ul>";

            container.innerHTML = html;
        }

        // 30초마다 데이터 불러오기
        setInterval(fetchData, 30000);

        // 페이지 로드 시 데이터 첫 로드
        fetchData();
    </script>
</body>
</html>

동작 방식

서버 측 (data.php):

  • JSON 형식으로 데이터를 클라이언트에 반환합니다.
  • 예제에서는 회원 ID, 이름, 가입일 등의 데이터를 포함했습니다.

클라이언트 측:

  1. AJAX 요청:
    • XMLHttpRequest 객체로 서버에서 데이터를 가져옵니다.
  2. JSON 데이터 파싱:
    • JSON.parse()로 서버에서 응답받은 JSON 데이터를 JavaScript 객체로 변환합니다.
  3. HTML 업데이트:
    • JSON 데이터를 기반으로 동적으로 HTML 콘텐츠를 업데이트합니다.
  4. 자동 업데이트:
    • setInterval(fetchData, 30000)를 사용해 30초마다 데이터를 갱신합니다.

출력 결과 (예제 데이터)  초기 로드 시

업데이트 시간: 2024-12-07 12:30:45
- ID: 1, 이름: 홍길동, 가입일: 2024-12-01
- ID: 2, 이름: 김영희, 가입일: 2024-12-02
- ID: 3, 이름: 이철수, 가입일: 2024-12-03

이 코드로 클라이언트와 서버 간에 JSON 데이터를 주고받으며 동적 업데이트를 구현할 수 있습니다.

필요에 따라 서버 응답 데이터를 확장하거나 클라이언트 렌더링 방식을 개선할 수 있습니다. 😊

반응형

댓글


Copyright ⓒ SmartWeb All rights reserved.