2010-05-21 7 views
8

최근에 시스템에 로그인 한 사람의 로그가있는 CMS를 프로그래밍했습니다. 현재이 데이터는 Ajax를 통해 jQuery UI 탭으로 제공된다. 이 정보를 메인 페이지의 사이드 바에 넣고 AJAX를 통해 매 30 초마다 (또는 일정 시간 동안)로드하려고합니다.AJAX 데이터를 X 분/초마다 새로 고침, jQuery

어떻게해야합니까? PHP 응답을 JSON 코딩해야합니까? 나는 AJAX와 JSON 데이터에 상당히 익숙하다. 여기

내가 현재 사용자 테이블 -

<?php 
$loginLog = $db->query("SELECT name_f, name_l, DATE_FORMAT(lastLogin, '%a, %b %D, %Y %h:%i %p') AS lastLogin FROM user_control ORDER BY lastLogin ASC LIMIT 10"); 
while ($recentLogin = $loginLog->fetch()) { 
echo $recentLogin['name_f'] . " " . $recentLogin['name_l'] . " - " . $recentLogin['lastLogin']; 
} 
?> 

감사에서 세부 사항을 뽑아 사용하고있는 PHP입니다! 이것이 내가 가진 무엇 UPDATE

좋아요 지금까지 .. 내가에 붙어 부분은 어떻게이 JSON을 통해 루프 박스에 입력이다. 내가 단 하나의 결과를 사용하고 그것이 []에 없다는 것을 보증하는 한 그것은 잘 작동합니다. 나는 Ajax와 JSON을 배웠다. 웬일인지 나에게 너무 쉽게 오지 않는다.

자바 스크립트 -

$(document).ready(function(){ 

       function refreshUsers(){ 

        $.getJSON('json.php', function(data) { 

          for (var i = 0; i < data.length; i++) { 

           $("#loadHere").html('<p>' + data.name + ' ' + data.lastLogin + '</p>'); 

          } 

       }); 

      } 

       var refreshInterval = setInterval(refreshUsers, 30 * 1000); 

       refreshUsers(); 

      }); 

무엇 내 PHP 스크립트 출력 -

[{"name":"Joe Smith","lastLogin":"Fri, May 21st, 2010 08:07 AM"},{"name":"Jane Doe","lastLogin":"Fri, May 21st, 2010 07:07 AM"}] 

감사합니다!

답변

17

PHP 쪽을 사용하십시오.

클라이언트 측, $.getJSON()를 사용

function refreshUsers(){ 
    $.getJSON(url, postData, function (data, textStatus){ 
    // Do something with the data 
    }); 
} 

// Keep interval in a variable in case you want to cancel it later. 
var refreshInterval = setInterval(refreshUsers, 30 * 1000); 

이러한 2, 당신은 시작하려면 많이해야한다. 이보다 더 많은 것은 우리에게 당신을 위해 일할 것을 요구할 것입니다.

+0

도움 주셔서 감사합니다. 나는 지금까지 가지고있는 것으로 나의 원래 게시물을 업데이트했다. JSON을 통해 반복하려고 노력하고 있습니다. Javascript/jQuery, Ajax 및 JSON의 두 루프를 처음 접했습니다. 다시 한 번 감사드립니다! – NightMICU

+0

다행스럽게 도울 수있었습니다! 이것이 정답이면 동일한 문제가있는 다른 사람들이 해결 방법을 알 수 있도록 허용 된 것으로 표시하십시오. 반복에 관해서는 PHP에서 가지고있는 것을 기억하고 JSON이 다른면과 정확히 똑같이 동작하므로 인코딩합니다 : 객체가 ab 인 경우'.' 연산자를 사용하여 JS의 속성에 액세스 할 수 있습니다. 그것이 배열이라면, 당신은 거의 언어로 반복 할 것입니다; 'data [i]'. PHP의지도는 JSON의 객체가됩니다. – Seb

+0

좋아, 그래서 JSON에서 데이터를 루프 처리하고 .appendTo()를 사용하여 적절한 DIV에 추가하는 방법을 알 수있었습니다. 하지만 필요한 것은 MySQL 테이블에서 결과를로드하고 X 초마다 사이드 바 DIV에 삽입하는 것입니다. 실제로 Mailslut의 방법이 더 좋을 것 같습니다. PHP를 사용하여 테이블을 반복하고 HTML을 DIV에 삽입하는 것이 간단합니다. 그래서, 내 질문 -이 응용 프로그램에 대한 JSON 대 $ .load()의 장점은 무엇입니까? JSON을 사용하고 매번 결과를 추가하지 않고 테이블의 모든 결과를 DIV에 추가하려면 어떻게해야합니까? 감사! – NightMICU

2

가장 간단한 방법은 (주관적인 것이 든 - 당신이 제시 한 유스 케이스에 대해서는 괜찮을 것입니다). 않습니다

var updateInterval = setInterval(function() { 
    $('#whereIWantToDisplayIt').load('/thePathToThatScript.php'); 
},30*1000); 

매 30 초,이 = whereIWantToDisplayIt

당신의 PHP 스크립트의 출력을로드하고 ID를 가진 요소로 그 출력을 둘 것입니다 그래도 난 셉의 답변을 좋아한다.

+0

'load()'를 사용하면 서버가 결과를 렌더링하는 방법을 알아야한다는 것을 의미합니다. IMHO, 프리젠 테이션을 분리하고 HTML 부분을 JavaScript 측으로 두는 것이 좋습니다. 결국 JS가 사용 중지 된 경우이 HTML은 사용되지 않습니다. – Seb

관련 문제