2013-10-21 4 views
0

CI보기에서 (새로 고치지 않고) 데이터 모델을 2 초마다 업데이트하려고합니다. 다른 곳에서 데이터베이스 내용을 변경할 수있는 사용 사례입니다 사용자.Codeigniter : 뷰에서 모델 호출 - DB 내용이 고정 된 것처럼 보임

<script type="text/javascript"> 
    var refreshFunc = setInterval(function() { 
    <?php 
    $this -> load -> model('m_cube', '', TRUE); 
    $stamp = $this -> $m_cube -> stamp(); 
    ?> 
    var stamp = "<?php echo $stamp; ?>"; 
    console.log(stamp);    
    }, 2000); 
    refreshFunc; 
    </script> 

I는 2 개의 제 2 고리를 만들 JS setInterval 사용, PostgreSQL 데이터베이스로부터 데이터를 검색하기 위해 CI 모델을 호출하고있다. 단순화 된 코드 샘플에서는 DB에 시간 소인을 묻습니다. 문제는 콘솔에 쓰여진 타임 스탬프가 업데이트되지 않는다는 것입니다.

2013-10-21 14:35:54.168-04 
2013-10-21 14:35:54.168-04 
2013-10-21 14:35:54.168-04 
... 

실제 데이터 테이블을 쿼리 할 때와 동일한 동작 - 최신 값을 반환하지 않습니다.

왜 모델이 DB의 "고정 된"버전에 액세스합니까?

답변

2

그것은 멈추지 않거나 "얼어 붙지"않았으며, 이전과 뒤에 무엇이 오는지 혼란 스러웠습니다.

AJAX를 사용하는 것을 볼 수 없으므로 php가 처리 될 때까지 (즉, db에서 데이터를 가져 와서 $ stamp에 할당 할 때) 페이지 - html, css 및 javascript도 아직 제공되지 않습니다. 서버에 의해 생성되고 서비스되거나 브라우저에 의해 출력되지 않습니다.

즉, setInterval 내부에는 항상 이미 생성 된 동일한 값이 있으므로 동일한 문자열을 다시 인쇄합니다.

계속 업데이트하려면 서버에 데이터를 계속 요청해야합니다. 즉, AJAX (Asynchronous JavaScript and XML)가 기본 AJAX와 별개의 요청으로 실행되기 때문에 편리합니다. 두 가지 다른 "수준"에서 작업하고 페이지의 나머지 부분은 정적 인 채로 (이미 제공되고 출력 됨) 콘텐츠를 가져옵니다.

jquery를 사용하는 경우 $.ajax()을 살펴볼 수 있습니다.이 기능을 사용하면 매우 편리합니다.

+0

아 예. 내 아약스를 닦을 시간이야. –

0

이 스크립트는 서버에서 실행될 때 모델 데이터를 가져 와서 <?php ?> 태그를 결과로 바꿉니다. 따라서 클라이언트 브라우저의 경우 2 초마다 서버에 접속하지 않고 2 초마다 stamp 값을 기록합니다. 업데이트하려면 Ajax 기술을 사용하는 것이 좋습니다.

관련 문제