2013-02-23 16 views
16

Bu yüzden bu küçük projeyi yapıyorum ve yakalama konusunda bazı sıkıntılar yaşıyorum. Çalışmayan bir şey, tarayıcı, verileri saklayan json dosyasını saklamaya devam ediyor ve json'u başka bir yerde güncellediğimde, tarayıcı önbelleğe alınmış olan json dosyasının eski sürümüne geri döner ve bunu okur. Ne yazık ki bunu istemiyorum. Tarayıcının dosyayı önbelleğe almasını istemiyorum, böylece sayfayı her yüklediğinde, sunucudan json dosyası için istekte bulunacak ve önbelleğe aldığı dosya yerine bu dosyaya göre hareket edecektir. Ancak, bu sayfada yer alan diğer tüm şeyleri önbelleğe almak istiyorum ama bunun işe yaraması için feda edilmesi gerekiyorsa o zaman yapmak istediğim bir fedakarlık. Ben JavaScript geçerli json dosyası atmak ve bana ben neyi başarmak yardımcı olmak içinTarayıcının bir json dosyasını önbelleğe alması nasıl engellenir?

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

veya tür bir şey gibi ya da bir şey için tekrar sunucuyu sormak gitmek yazan bir çağrı olacağını o öngören ediyorum bahsetmek mi ... yardım?

+0

** önbellekleme ..... – arqam

cevap

33

kolay yolu

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

bir çözüm JavaScript kullanarak komut elemanını oluşturmak ve bunun gibi güncel saati eklemek olacaktır sunucu tarafında yok sayılır bazı rasgele parametre ile kaynak dizesi ekleyin etmektir :

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

bu şekilde, her çağrıda (nedeniyle parametreye) farklı bir dosya olarak görünmektedir olarak JSON dosyasını önbelleğe asla tarayıcı.

+0

böylece bir mySaveFiles src'si olan bir başlıkta bir etiket bulundurmak yerine, sayfa yüklendiğinde ilk kez çalıştırılan bir işlevde orada sağladığınız kod gibi bir şey arardım tarif ettiğim gibi ol –

+0

@MuggyAte Temelde evet, – Sirko

+0

Teşekkürler. Diğer bazı insanlar tarafından önerilen diğer yöntemlerden bazılarını denedim ama bu, istediğimi gerçekleştirmede en başarılı olanı. teşekkürler –

0

herhangi bir veriyi önbelleğe almak istemiyorsanız, o zaman meta etiketinde

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

json dosyası haricinde her şeyi önbelleğe alabilirsem iyi olur, bunu zaten denedim ama performansı büyük ölçüde azaltıyor gibi görünüyor.En iyi alternatifi bulabilirsem bu son çare olurum :( –

+0

JSON dosyasında önbelleği durdurmak için bu yardımcı olur mu? Tek bir HTML sayfası için, doğru mu? @Ranjith – Vaishak

2

İki seçenek aşağıda kullanabilirsiniz:?

  1. bir mySaveFiles.json ekle t sonuna damgası sorgu parametresi = URL’nin
  2. Dosyayı XmlHttpRequest nesnesi ile çekin (sunucuya bağlı olarak yine de bir zaman damgası eklemeniz gerekebilir). Benim favorilerimden
6

biri (bu sizin için mümkün olup olmadığını, bunu göremiyorum) sadece htaccess olan

birden uzantıları

<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi|json)$"> 
    Header unset Cache-Control 
</FilesMatch> 
sadece 1 uzatılması için

devre dışı bırak önbellek için

devre dışı bırak önbellek

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

burada buldum: http://www.queness.com/post/5421/17-useful-htaccess-tricks-and-tips

+0

Oh wow bu harika bir çözüm denemek zorundayım şimdi dışarıda :) umarım bu işte bir zaman damgası eklemekten daha kolay olacak –

+0

burada bir problemle karşılaşıyorum. Bunu yapıştırdım ve istemediğim şeyleri filtreledim ama sayfanın üst kısmında, bu başlık satırında Cache-Control unset yazan ve bu metin satırının görünmesini istemediğim bir metin var. ben ne yaparım? –

+0

Kodunuza tam olarak ne yapıştırdınız? 1 uzantı için önbelleği devre dışı bırakmak için güncelliyorum –

İlgili konular