Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: warunkowe odświeżanie s serwera zamiast z pamieci podrecznej przegladarki
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
BartT
Witam
Proszę o pomoc w sprawie wywołania efektu odświeżenia strony w taki sposób aby obrazki zostały pociągnięte z serwera a nie z cache'a.
W formularzu wysyłam na serwer obrazek, który po obróbce zostaje zapisany pod konkretną nazwą jako plik i jako wpis w mysql. Nazwa obrazka jest niezmienna - po zmianie obrazka na inny, dotychczasowy zostaje na serwerze zastąpiony nowym, który ma tę samą nazwę.
Po powrocie na stronę, która te obrazki wyświetla, przeglądarka nie zauważa, że cokolwiek się zmnieniło i wyświetla stan sprzed zmiany obrazka - nazwa pliku (ta sama) wskazuje na plik, który ma już w cache'u więc pobiera go stamtąd, a to jest stary obrazek, który był przed zmianą. Ręczne odświeżenie strony powoduje poprawne wyświetlenie aktualnego obrazka z serwera.
Moim problemem jest programowe zmuszenie przeglądarki do wykonania jednej prostej operacji odświeżenia strony jak Ctrl-R w firefoxie.
Różne próby w java script (które podejmowałem po omacku bo nie znam javy) powodują albo ciągłe odświeżanie w pętli albo brak odświeżania (albo może odświeżanie z cacha) - w każdym razie bez efektów.
Robię tak:
Po zmianie zdjęcia przekazuję phpem parametr w $_GET. Na stronie wyświetlającej obrazki sprawdzam (w php) istnienie tego parametru w $_GET i jeśli jest, wysyłam do przeglądarki kod java-script, którym usiłuję odświezyć stronę oraz kasuję parametr kontrolny z $_GET (aby odświeżać tylko raz). Nie wiem jak ma wyglądać ten kod java. Kod jak niżej nie daje efektu.
  1. if (isset($_GET['reload']))
  2. {
  3. echo '<script type="text/javascript">onload=document.location.reload(true);)</script>';
  4. unset($_GET['reload']);
  5. };


Nie chcę przy zmianie obrazka zmieniac jego nazwy dodając losowy ciąg znaków aby nazwa była inna niż w cache'u.
Nie mogę użyć odświeżania po krótkim czasie w sekcji meta html bo całość mam zorganizowaną w postaci niezmiennego szkieletu, w który php wkleja mi dynamicznie tylko kod każdej podstrony pomiędzy <div></div> a nie generuje całości.
Na stronach mam sporo niezmiennej grafiki, która ma być z cache'a więc chcę odświeżać z serwera jak najmniej - tylko warunkowo konkretną podstronę a wręcz konkretny obrazek jakby się tak dało.

Z góry dziękuję za pomoc
Bart


thek
Niestety to wina przeglądarki, bo to ona w takim wypadku decyduje co zrobić. Można ją przymuszać na kilka sposobów:
1. w htaccess ustawiać, żeby miały określone rozszerzenia plików niewielki okres cache'owania
2. dodawać w nazwie pliku losowe wartości, które nie wpływają na wyświetlenie, a są widziane przez przeglądarkę jako coś nowego. O co chodzi? Dodawaj do nazwy obrazka parametry.
czyli obrazek.jpg?czas=ZMIENNA, gdzie ZMIENNA jest wartością losową. W ten sposób przeglądarka będzie cały czas uważać, że ma do czynienia z nowym obrazkiem.
BartT
Hmm..., czyli mówisz, że java mi tu na nic i że wystarczy tylko zmodyfikować w html
z:
  1. <img src="sciezka/nazwa.jpg>

na:
  1. <img src="sciezka/nazwa.jpg?parametr=cokolwiek_losowego>

nie zmieniając nazwy plików ani w ogóle nie robiąc nic innego??

Zrobiłem sobie wobec tego:
  1. echo '<img src="./photos/'.$nazwa.'.jpg?forgetcache='.time().'">';

i... wygląda że działa :-)
choć nie jestem już pewien bo nie wiem czemu wcześniej też miewałem efekty pozytywne a innym razem znowu przeglądarka ciągnęła z cache'a - nie wiem od czego to zależało...
Czy ja Cię dobrze zrozumiałem, że to takie proste? ;-)

Pozdrowienia
Bart
thek
Dobrze zrozumiałeś... To takie proste jak napisałeś. W ten sposób postępuje się nie tylko z obrazkami, ale i plikami CSS lub JS, które czasem się zmieniają ale nie zawsze odświeżają bo też występuje problem nazwy tej samej. Można jako parametr wtedy dać datę modyfikacji pliku. Jeśli przeglądarka wykryje że są różne... Zassa nową wersję. Jeśli nie - zostawi starą.
BartT
Wobec tego serdeczne dzięki, znowu się czegoś nauczyłem
Pozdrowienia
Bart
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.