2013-02-23 14 views
16

Więc robię ten mały projekt i mam pewne problemy z przechwytywaniem. Jedną z rzeczy, która nie działa, jest przeglądarka przechowuje buforowany plik json, który zawiera dane składowania, a kiedy aktualizuję json gdzieś indziej, przeglądarka wraca do starej wersji pliku json, który jest przechowywany w pamięci podręcznej i czyta to. Niestety nie chcę tego. Nie chcę, aby przeglądarka w ogóle buforowała ten plik, więc za każdym razem, gdy załaduje stronę, poprosi serwer o plik json i będzie działał zgodnie z tym plikiem zamiast z jakimkolwiek plikiem, który ma w pamięci podręcznej. Chciałbym jednak móc przechowywać w pamięci podręcznej wszystkie inne rzeczy, które są na stronie, ale jeśli to musi być poświęcone, aby to działało, to jest to poświęcenie, które chcę zrobić. Ja przewidując, że w JavaScript, który nie będzie połączenia, które mówi odrzucić bieżący plik json i iść zapytać serwer ponownie do niego czy cośJak uniemożliwić buforowanie pliku json przez przeglądarkę

<script src="mySaveFiles.json" cache="no"> 

lub czegoś w tym rodzaju, aby pomóc mi osiągnąć to, co ja” m rozmawiasz o ... pomocy?

+0

** caching ..... – arqam

Odpowiedz

33

Najprostszym sposobem jest dołączenie ciąg źródłowy z jakimś losowym parametrem, który zostanie zignorowany po stronie serwera

<script src="mySaveFiles.json?nocache=123" ></script> 

Jednym rozwiązaniem byłoby wygenerowanie element skryptu przy użyciu JavaScript i dołączyć aktualny czas takiego :

var el = document.createElement(script); 
el.src = 'mySaveFiles.json?nocache=' + (new Date()).getTime(); 
document.head.appendChild(el); 

ten sposób, przeglądarka nie będzie buforować plik JSON, ponieważ wydaje się być inny plik (ze względu na parametr) na każde wezwanie.

+0

więc zamiast mieć znacznik w nagłówku, który ma src z mySaveFiles, powinienem wywołać coś takiego, jak kod podany tam w funkcji, która jako pierwsza zostanie uruchomiona po załadowaniu strony i być tak, jak to opisałem? –

+0

@MuggyAte Zasadniczo tak, – Sirko

+0

Dzięki. Próbowałem niektórych innych metod, które zostały zasugerowane przez niektórych innych ludzi, ale ten wydaje się być najbardziej udany w osiąganiu tego, co chciałem. dzięki –

0

jeśli nie chcesz buforować żadnych danych można użyć poniższy meta tagu

<meta http-equiv="pragma" content="no-cache"> 
<meta http-equiv="expires" content="-1"> 
+0

Cóż, to by bądź dobry, jeśli mogę cache wszystko oprócz pliku json. Próbowałem już, ale wydaje się, że znacznie zmniejszyć wydajność.Myślę, że to będzie moja ostatnia deska ratunku, jeśli znajdę najlepszą alternatywę :( –

+0

Czy ta pomoc ma na celu zatrzymanie pamięci podręcznej w pliku JSON? Jest to dla pojedynczej strony HTML, prawda? @Ranjith – Vaishak

2

dwie opcje:?

  1. Dodać mySaveFiles.json t = parametr zapytania datownik do końca adresu URL.
  2. Wyciągnij plik za pomocą obiektu XmlHttpRequest (może być konieczne dodanie znacznika czasu w zależności od serwera).
6

Jednym z moich ulubionych jest tylko htaccess (jeśli jest to możliwe dla ciebie, nie widzę tego)

Wyłącz cache dla wielu rozszerzeń

<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi|json)$"> 
    Header unset Cache-Control 
</FilesMatch> 

Wyłącz cache tylko 1 rozszerzeniem

<Files .json> 
    Header unset Cache-Control 
</Files> 

znalazłem go tutaj: http://www.queness.com/post/5421/17-useful-htaccess-tricks-and-tips

+0

Oh wow, to niesamowite rozwiązanie Muszę to wypróbować już teraz :) mam nadzieję, że będzie to prostsze niż konieczność dodania znacznika czasu do rzeczy oo –

+0

ok, napotykam problem tutaj. wkleiłem to i odfiltrowałem rzeczy, których nie chcę, ale na górze strony znajduje się ta linia tekstu, która mówi, że Header rozbroił Cache-Control i nie chcę, aby ta linia tekstu pojawiała się. co ja robię? –

+0

Co dokładnie wkleiłeś w swoim kodzie? Aktualizuję wyłączenie pamięci podręcznej dla 1 rozszerzenia –

Powiązane problemy