2012-11-06 15 views
5

Chcę buforować dane w broswer tak że broswer nie trzeba kwerendy serwera w kilka minut. Dodałem nagłówek php cache, ale wygląda na to, że nie działa. Tu jest mój kodu ajax i kod php: kod Ajax: KodAjax nie może buforować

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

Dzięki za MitchS i lenzai „s pomocy. Ten problem został rozwiązany. cache: opcja prawda powinny być ustawione przed wszelkimi bibliotek ajax jquery odpytywanie i starych nie obsługują buforowanie. Więc upewnij się, że korzystasz z najnowszej jquery biblioteki

Dla ludzi, którzy chcą pracy przykład: Kod

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

kod 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

data wygaśnięcia jest twoja przeszłość –

Odpowiedz

2

Jesteś ustawiając nagłówek Last-Modified na godzinę temu i ustawiając godzinę na max-age.

Oznacza to w punkcie ponownie wysłać te dane, to już przy maksymalnym wieku pozwoliło cache i wszelkie późniejsze wnioski muszą być ponownie wysłane.

+0

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

+1

I zmienił 'Last-Modified' na 30 minut temu. Ale nadal nie działa. – Yee

0

Napisałem projekt testowy adaptacją Twój na kodzie. http://test-lenzai.rhcloud.com/index.html

Po każdym naciśnięciu przycisku uruchamia nową ajax żądania ... Zapytanie jest wysyłane dwa razy wtedy pamięć podręczna przeglądarki jest używany !!!!

Spowodowane jest JQuery:

  • pierwsze zapytanie jest dołączany &_=s135227990... (niektóre datownik prawdopodobnie)
  • kolejne kwerendy nie mają ten dodatkowy argument, a wszystkie zapytania są identyczne efektywne wykorzystanie pamięci podręcznej.

Teraz pytanie brzmi: jak podkręcić jQuery tak, że pytania 1 i drugi Ajax są identyczne

Powiązane problemy