2012-11-06 9 views
5

broswer가 몇 분 내에 서버를 쿼리 할 필요가 없도록 broswer에 데이터를 캐시하고 싶습니다. PHP 캐시 헤더를 추가했지만 작동하지 않는 것 같습니다. Ajax 코드 :Ajax가 캐시 할 수 없음

function myAjax(name, callback) { 
    var url = './php/getJson.php?name=' + encodeURIComponent(name) + '&callback=?'; 
    jQuery.getJSON(url, function(data) { 
     callback(data); 
     jQuery.ajaxSetup({ cache: true }); 
    }); 
} 

PHP 코드 : MitchSlenzai의 도움을

$seconds_to_cache = 3600; 
$ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT"; 
$lm = gmdate("D, d M Y H:i:s", time() - $seconds_to_cache/2) . " GMT"; 
header("Last-Modified: $lm"); 
header("Expires: $ts"); 
header("Pragma: cache"); 
header("Cache-Control: public, max-age=$seconds_to_cache"); 

include_once('getData.php'); 

$output = $_GET['name']; 

echo $_GET['callback'].'('.$output.')'; 

덕분에 여기 내 아약스 코드와 PHP 코드입니다. 이 문제는 해결되었습니다. cache : true 옵션은 모든 ajax 쿼리와 오래된 jquery 라이브러리가 캐싱을 지원하기 전에 설정되어야합니다.

Ajax 코드 : 그래서 는 작업 예제를 원하는 사람들을위한 최신 jQuery 라이브러리

를 사용하고 있는지 확인

var callback = function(data) { 
    alert("callback"); 
} 
function myAjax(name) { 
    var url = './php/getJson.php?name=' + encodeURIComponent(name) + '&callback=?'; 

    jQuery.ajaxSetup({ cache: true }); 
    jQuery.getJSON(url, function(data) { 
     callback(data); 
    }); 
} 

PHP 코드 : 당신은

$seconds_to_cache = 3600; 
$ts = gmdate("D, d M Y H:i:s", time() + $seconds_to_cache) . " GMT"; 
$lm = gmdate("D, d M Y H:i:s", time() - $seconds_to_cache/2) . " GMT"; 
header("Last-Modified: $lm"); 
header("Expires: $ts"); 
header("Pragma: cache"); 
header("Cache-Control: public, max-age=$seconds_to_cache"); 

$output = '{"eventList":["event1","test event"]}'; 

echo $_GET['callback'].'('.$output.')'; 
+0

당신의 유효 기간이 –

답변

2

Last-Modified 헤더를 1 시간 전에 설정하고 max-age을 1 시간으로 설정하십시오.

이 데이터를 보내는 시점에 이미 캐시에 허용 된 최대 사용 기간이며 이후 요청은 다시 보내야합니다.

+0

http://www.electrictoolbox.com/php-caching-headers/ –

+1

나는 과거입니다 jQuery를 조정할하는 방법입니다 'Last-Modified'를 30 분 전에 변경했습니다. 하지만 여전히 작동하지 않습니다. – Yee

0

나는 당신의 코드에 맞게 테스트 프로젝트를 작성했다. http://test-lenzai.rhcloud.com/index.html

버튼을 누를 때마다 새로운 Ajax 요청이 실행됩니다. 쿼리가 두 번 전송 된 후 브라우저 캐시가 사용됩니다. !!!!

이것은 JQuery와에 의해 발생 :

  • 첫 번째 쿼리는 &_=s135227990... (일부 타임 스탬프 아마)
  • 후속 쿼리는이 여분의 인수와 동일한 모든 쿼리를 효과적으로 캐시를 사용하지 않아도 추가됩니다.

이제 문제는 첫번째와 두번째 아약스 쿼리가 동일하도록

관련 문제