2012-11-06 31 views
5

Tôi muốn lưu vào bộ nhớ cache trong broswer để broswer không cần truy vấn máy chủ sau vài phút. Tôi đã thêm tiêu đề bộ nhớ cache php nhưng có vẻ như nó không hoạt động. Đây là mã ajax của tôi và mã php: mã Ajax: MãAjax không thể lưu vào bộ nhớ cache

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:

$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.')'; 

Cám ơn MitchSgiúp đỡ lenzai 's. Vấn đề này được giải quyết. Bộ nhớ cache : true nên được đặt trước khi bất kỳ truy vấn ajax và thư viện jquery cũ nào không hỗ trợ bộ nhớ đệm. Vì vậy, chắc chắn rằng bạn đang sử dụng jquery thư viện mới nhất

Đối với những người muốn có một ví dụ làm việc: Mã

Ajax:

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); 
    }); 
} 

mã 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

thời hạn sử dụng của bạn là quá khứ –

Trả lời

2

Bạn đang đặt tiêu đề Last-Modified thành giờ trước và đặt max-age thành một giờ.

Điều này có nghĩa là tại thời điểm bạn gửi dữ liệu này, nó đã ở độ tuổi tối đa được phép cho bộ nhớ cache và mọi yêu cầu tiếp theo phải được gửi lại.

+0

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

+1

tôi đã thay đổi 'Last-Modified' thành 30 phút trước. Nhưng nó vẫn không hoạt động. – Yee

0

Tôi đã viết một dự án thử nghiệm được điều chỉnh từ mã của bạn. http://test-lenzai.rhcloud.com/index.html

Mỗi khi bạn nhấn nút, nó sẽ khởi chạy yêu cầu ajax mới ... Truy vấn được gửi hai lần thì bộ nhớ cache của trình duyệt được sử dụng !!!!

này là do JQuery:

  • truy vấn đầu tiên được gắn &_=s135227990... (một số dấu thời gian có lẽ)
  • truy vấn tiếp theo không có tranh luận thêm này và tất cả các truy vấn giống hệt nhau đang sử dụng một cách hiệu quả bộ nhớ cache.

Bây giờ câu hỏi là làm thế nào để tinh chỉnh jquery để 1 và ajax thứ hai truy vấn giống hệt nhau

Các vấn đề liên quan