2013-02-23 19 views
16

तो मैं इस छोटी परियोजना को बना रहा हूं और मुझे पकड़ने में कुछ परेशानी हो रही है। एक चीज जो काम नहीं कर रही है वह ब्राउज़र जेएसओ फाइल को कैश करता रहता है जिसमें डेटा सहेजता है और जब मैं कहीं और जेसन अपडेट करता हूं, तो ब्राउजर जेसन फाइल के पुराने संस्करण पर वापस जाता है जिसे उसने कैश किया है और उसे पढ़ा है। दुर्भाग्य से मुझे वह नहीं चाहिए। मैं नहीं चाहता कि ब्राउज़र फ़ाइल को कैश करे, ताकि प्रत्येक बार जब यह पृष्ठ लोड हो जाए, तो वह सर्वर को जेएसएस फ़ाइल के लिए पूछेगा और उस फ़ाइल के अनुसार उस फाइल के अनुसार कार्य करेगा जिसे उसने कैश किया है। हालांकि मैं पृष्ठ पर मौजूद सभी अन्य सामानों को कैश करने में सक्षम होना चाहूंगा, लेकिन यदि इसे काम करने के लिए इसका त्याग करना है तो यह एक बलिदान है जिसे मैं तैयार करना चाहता हूं। मैं envisioning रहा है कि जावास्क्रिप्ट में है कि वहाँ एक फोन है कि मौजूदा json फ़ाइल त्यागने और सर्वर पूछना मुझे प्राप्त मैं क्या 'मदद करने के लिए की तरहब्राउज़र को जेएसएस फ़ाइल कैशिंग करने से रोकने के लिए कैसे करें

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

या एक तरह से कुछ यह या कुछ और के लिए फिर से जाना कहते हैं हो सकता है मैं बात कर रहा हूँ ... मदद?

+0

** कैशिंग ..... – arqam

उत्तर

33

सबसे आसान तरीका है कुछ यादृच्छिक पैरामीटर, जो सर्वर साइड पर ध्यान नहीं दिया जाता है के साथ स्रोत स्ट्रिंग संलग्न करने के लिए

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

एक समाधान जावास्क्रिप्ट का उपयोग स्क्रिप्ट तत्व पैदा करते हैं और इस तरह वर्तमान समय संलग्न करने के लिए होगा :

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

इस तरह, ब्राउज़र JSON-फ़ाइल कैश कभी नहीं होगा के रूप में यह हर कॉल में (पैरामीटर के कारण) किसी भिन्न फ़ाइल प्रतीत होता है।

+0

इसलिए हेडर में एक टैग रखने के बजाय, जिसमें MySaveFiles का एक स्रोत है, मैं उस कोड में आपके द्वारा प्रदान किए गए कोड की तरह कुछ कहूंगा जो पृष्ठ लोड होने पर पहले चलाया जाता है और यह होगा जिस तरह से मैंने इसका वर्णन किया है? –

+0

@MuggyAte मूल रूप से हाँ, – Sirko

+0

धन्यवाद। मैंने कुछ अन्य तरीकों से कुछ अन्य तरीकों का सुझाव दिया है, लेकिन यह मुझे प्राप्त करने में सबसे सफल प्रतीत होता है। धन्यवाद –

0

अगर आप न किसी भी डाटा को कैश करना चाहते हैं तो आप उपयोग कर सकते हैं मेटा टैग

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

वैसे यह होगा अच्छा होगा अगर मैं जेसन फ़ाइल को छोड़कर सबकुछ कैश कर सकता हूं। मैंने पहले ही यह कोशिश की है लेकिन ऐसा लगता है कि यह प्रदर्शन को बहुत कम करता है।मुझे लगता है कि अगर मैं सबसे अच्छा विकल्प पा सकता हूं तो यह मेरा आखिरी उपाय होगा :( –

+0

क्या यह JSON फ़ाइल में कैश को रोकने के लिए मदद करता है? यह व्यक्तिगत HTML पृष्ठ के लिए है, है ना? @ रंजीत – Vaishak

2

दो विकल्प नीचे:

  1. एक mySaveFiles.json जोड़े टी अंत करने के लिए = टाइमस्टैम्प क्वेरी पैरामीटर यूआरएल का
  2. फ़ाइल को XmlHttpRequest ऑब्जेक्ट के साथ खींचें (आपको अभी भी सर्वर के आधार पर एक टाइमस्टैंप जोड़ने की आवश्यकता हो सकती है)।
6

मेरे पसंदीदा में से एक बस इनको है (यदि यह आपके लिए संभव है, मुझे लगता है कि नहीं देख सकते हैं)

कई एक्सटेंशन

<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi|json)$"> 
    Header unset Cache-Control 
</FilesMatch> 
सिर्फ 1 विस्तार के लिए

अक्षम कैश के लिए अक्षम कैश

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

मैं इसे यहाँ पाया: http://www.queness.com/post/5421/17-useful-htaccess-tricks-and-tips

+0

ओह वाह यह एक शानदार समाधान है, मुझे इसे आजमा देना चाहिए अभी बाहर :) उम्मीद है कि चीजों पर टाइम स्टैंप जोड़ने से यह आसान होगा oo –

+0

ठीक है, मैं यहां एक समस्या में भाग रहा हूं। मैंने चिपकाया कि उन चीजों को फ़िल्टर और फ़िल्टर किया गया है जिन्हें मैं नहीं चाहता लेकिन पेज के शीर्ष पर इसमें टेक्स्ट की यह पंक्ति है जो कहती है कि हैडर कैश-कंट्रोल को अनसेट करता है और मैं उस टेक्स्ट की रेखा को दिखाना नहीं चाहता हूं। मैं क्या करूं? –

+0

आपने अपने कोड में वास्तव में क्या चिपकाया? मैं 1 एक्सटेंशन के लिए कैश अक्षम करने के लिए अद्यतन करता हूं –

संबंधित मुद्दे

 संबंधित मुद्दे