दिलचस्प पोस्ट
इरादा कैमरा पैरामीटर सेट नहीं करता है getCurrentPosition () और watchPosition () असुरक्षित मूल पर बहिष्कृत कर रहे हैं जावा परियोजनाओं में अप्रयुक्त / मृत कोड कैसे खोजें जावा के लैम्ब्डा वाक्यविन्यास के लिए क्या टूटना है? जावास्क्रिप्ट दिनांक प्रारूप में MySql दिनांकटाइम स्टैंप कन्वर्ट करें समय के लायक सूक्ष्म अनुकूलन क्या है? `Std :: function <void (…)>` गैर-शून्य समारोह को कॉल करने के लिए प्रयोग करना प्रस्तुत करने से पहले फ़ॉर्म की पुष्टि करें C ++ क्लास में वर्चुअल विधि होने के प्रदर्शन की लागत क्या है? mysql -> tbl में डालें (अन्य तालिका से चुनें) और कुछ डिफ़ॉल्ट मान वर्तमान गिट शाखा को एक मास्टर शाखा बनाएं मैं NSArray को उद्देश्य-सी में कैसे बदल सकता हूँ? आईओएस में जावास्क्रिप्ट और फोनगैप का उपयोग करके मैं ऑट्रिएशन परिवर्तन को सही ढंग से कैसे पहचान सकता हूं? सीमा लंबाई को सीमित करने का कोई भी तरीका? जावास्क्रिप्ट: कक्षा। विधि बनाम कक्षा। प्रोटोपीपी। विधि

JQuery AJAX कॉल परिणाम के ब्राउज़र कैशिंग को रोकें

ऐसा लगता है कि अगर मैं $.get() का उपयोग करके गतिशील सामग्री लोड करता हूं, तो परिणाम ब्राउज़र में कैश किया जाता है।

QueryString में कुछ यादृच्छिक स्ट्रिंग जोड़ना इस समस्या को हल करने लगता है (मैं new Date().toString() उपयोग करता हूं, लेकिन यह एक हैक की तरह लगता है

क्या यह हासिल करने का कोई अन्य तरीका है? या, यदि अद्वितीय स्ट्रिंग इस प्राप्त करने का एकमात्र तरीका है, तो new Date() अलावा कोई सुझाव?

वेब के समाधान से एकत्रित समाधान "JQuery AJAX कॉल परिणाम के ब्राउज़र कैशिंग को रोकें"

मैं new Date().getTime() उपयोग करता हूं, जो टकराव से new Date().getTime() जब तक आपके पास एक ही new Date().getTime() भीतर कई अनुरोध नहीं होते हैं:

 $.get('/getdata?_=' + new Date().getTime(), function(data) { console.log(data); }); 

संपादित करें: यह उत्तर कई साल पुराना है यह अभी भी काम करता है (इसलिए मैंने इसे नहीं हटाया है), लेकिन अब इसे प्राप्त करने के बेहतर / साफ तरीके हैं । मेरी प्राथमिकता इस विधि के लिए है, लेकिन यह उत्तर भी उपयोगी है यदि आप प्रत्येक अनुरोध के लिए एक पृष्ठ के जीवनकाल के दौरान कैशिंग को अक्षम करना चाहते हैं।

निम्न भविष्य के AJAX अनुरोधों को कैश होने से रोकेगा, चाहे आप जिस jQuery विधि का उपयोग करें ($ .get, $ .ajax, आदि)

 $.ajaxSetup({ cache: false }); 

JQuery का $ .get () परिणाम कैश करेगा। के बजाय

 $.get("myurl", myCallback) 

आपको $ .एजेक्स का उपयोग करना चाहिए, जो आपको कैशिंग बंद करने की अनुमति देगा:

 $.ajax({url: "myurl", success: myCallback, cache: false}); 

एक और तरीका यह है कि संवेदक से सर्वर में कोई कैश हेडर कोड प्रदान न करें जो एजेक्स कॉल की प्रतिक्रिया उत्पन्न करता है:

 response.setHeader( "Pragma", "no-cache" ); response.setHeader( "Cache-Control", "no-cache" ); response.setDateHeader( "Expires", 0 ); 

आप एक छोटे (नयी तिथि ()। GetTime ()) प्रत्येक और हर समय करने के बजाय संक्षिप्त नोटन $। (नो) का उपयोग कर सकते हैं।

निजी तौर पर मुझे लगता है कि क्वेरी स्ट्रिंग पद्धति सर्वर पर हेडर सेट करने की कोशिश करने के मुकाबले अधिक विश्वसनीय है – इसमें कोई गारंटी नहीं है कि कोई प्रॉक्सी या ब्राउज़र वैसे भी कैश नहीं करेगा (कुछ ब्राउज़र दूसरे से भी बदतर हैं – कोई नाम नहीं नामकरण)।

मैं आमतौर पर Math.random() प्रयोग करता हूं। Math.random() लेकिन मैं तारीख का उपयोग करने में कुछ भी गलत नहीं देखता हूं (आपको एजेएक्स अनुरोधों को एक ही मान दो बार प्राप्त करने के लिए पर्याप्त रूप से नहीं करना चाहिए)।

यहां दिए गए सभी उत्तर अनुरोधित यूआरएल पर पदचिह्न छोड़ देते हैं जो सर्वर के प्रवेश लॉग में दिखाई देंगे।

मुझे किसी साइड इफेक्ट के साथ हेडर आधारित समाधान की आवश्यकता नहीं है और मुझे पता चला कि यह सभी ब्राउज़रों में वेब पेज कैशिंग को नियंत्रित करने के तरीके में निर्दिष्ट शीर्ष लेखों को सेट करके हासिल किया जा सकता है? ।

कम से कम क्रोम के लिए काम करने वाले परिणाम, हो सकता है

 $.ajax({ url: url, headers: { 'Cache-Control': 'no-cache, no-store, must-revalidate', 'Pragma': 'no-cache', 'Expires': '0' } }); 

दस्तावेज़ीकरण के बाद: http://api.jquery.com/jquery.ajax/

आप के साथ cache संपत्ति का उपयोग कर सकते हैं:

 $.ajax({ method: "GET", url: "/Home/AddProduct?", data: { param1: value1, param2: value2}, cache: false, success: function (result) { // TODO } }); 

असली सवाल यह है कि आपको कैश्ड नहीं होने के लिए इसकी आवश्यकता क्यों है। यदि इसे कैश्ड नहीं किया जाना चाहिए क्योंकि यह हर समय बदलता है, सर्वर को संसाधन कैश नहीं करने के लिए निर्दिष्ट करना चाहिए। यदि यह केवल कभी-कभी बदलता है (क्योंकि यह संसाधनों में से एक पर निर्भर करता है, वह बदल सकता है), और अगर क्लाइंट कोड में इसके बारे में जानने का एक तरीका है, तो यह यूआरएल को एक डमी पैरामीटर जोड़ सकता है जिसे कुछ हैश या अंतिम संशोधित तिथि से गिना जाता है उन संसाधनों का (जो कि हम माइक्रोसॉफ्ट अजाक्स स्क्रिप्ट संसाधनों में करते हैं, ताकि उन्हें हमेशा कैश्ड किया जा सके, लेकिन नए संस्करणों को अभी भी प्रदर्शित किया जा सकता है)। यदि क्लाइंट परिवर्तनों का नहीं जान सकता है, तो सर्वर के लिए मैन्युअल रूप से सही तरीके से संभाल करने के लिए सही तरीके से होना चाहिए और क्लाइंट को कैश्ड संस्करण का उपयोग करना चाहिए या नहीं। मुझे लगता है कि एक यादृच्छिक पैरामीटर जोड़ना या क्लाइंट से कैश करने के लिए कभी नहीं कहना गलत है क्योंकि cacheability सर्वर संसाधन की संपत्ति है, और इसलिए सर्वर-साइड का निर्धारण किया जाना चाहिए। खुद को पूछने के लिए एक और सवाल यह है कि क्या यह संसाधन वास्तव में जीईटी के माध्यम से किया जाना चाहिए या क्या उसे पोस्ट के माध्यम से जाना चाहिए? यह शब्दार्थों का सवाल है, लेकिन इसमें सुरक्षा संबंधी निहितार्थ भी हैं (वहां ऐसे हमले हैं जो सर्वर को GET के लिए ही अनुमति देता है)। पोस्ट कैश्ड नहीं मिलेगा।

बेशक "कैश ब्रेकिंग" तकनीकों को नौकरी मिल जाएगी, लेकिन यह पहली जगह पर नहीं होगा यदि सर्वर ने ग्राहक को संकेत दिया कि प्रतिक्रिया को कैश नहीं किया जाना चाहिए। कुछ मामलों में यह कैश प्रतिक्रियाओं के लिए फायदेमंद होता है, कुछ समय नहीं। सर्वर को डेटा का सही जीवनकाल तय करने दें। आप इसे बाद में बदलना चाहेंगे। आपके UI कोड के कई अलग-अलग स्थानों की तुलना में सर्वर से बहुत आसान करना है

बेशक यह आपकी मदद नहीं करता है अगर आपके पास सर्वर पर कोई नियंत्रण नहीं है।

एक GET के बजाय एक पोस्ट अनुरोध का उपयोग करने के बारे में क्या …? (जो आपको वैसे भी चाहिए …)

हो सकता है कि आपको इसके बजाय $ .jax () को दिखाना चाहिए (यदि आप jQuery का उपयोग कर रहे हैं, जो ऐसा दिखता है)। इस पर एक नज़र डालें: http://docs.jquery.com/Ajax/jQuery.ajax#options और विकल्प "कैश"

एक अन्य तरीका यह देखना होगा कि आप सर्वर साइड पर कैश कैसे करते हैं।

दिए गए उत्कृष्ट उत्तरों के लिए एक छोटा सा अतिरिक्त: यदि आप जावास्क्रिप्ट के बिना उपयोगकर्ताओं के लिए गैर-एजेक्स बैकअप समाधान के साथ चल रहे हैं, तो आपको उन सर्वर-साइड हेडर को वैसे भी ठीक करना होगा। यह असंभव नहीं है, हालांकि मैं इसे समझने वाले लोगों को समझता हूं;)

मुझे यकीन है कि ऐसा एक और प्रश्न है जिससे आप उपयुक्त हैंडर्स का पूरा सेट दे सकते हैं। मैं पूरी तरह से मस्तिष्क के जवाब में सभी आधारों 100% को कवर नहीं कर रहा हूँ।

मोबाइल सफ़ारी पर $.ajaxSetup() के cache विकल्प का उपयोग करते हुए, ऐसा प्रतीत होता है कि आपको पोस्ट के लिए टाइमस्टैम्प का उपयोग करना पड़ सकता है, क्योंकि मोबाइल सफारी कैश को भी। $.ajaxSetup() पर प्रलेखन के अनुसार (जिसे आप $.ajaxSetup() से निर्देशित कर रहे हैं):

कैश को गलत पर सेट करना केवल HEAD और GET अनुरोधों के साथ ठीक से काम करेगा यह GET पैरामीटर को "_ = {टाइमस्टैम्प}" को जोड़कर काम करता है पैरामीटर को अन्य प्रकार के अनुरोधों के लिए जरूरी नहीं है, IE8 को छोड़कर जब कोई पोस्ट एक यूआरएल के लिए किया जाता है जो कि पहले से जीईटी द्वारा अनुरोध किया गया है।

इसलिए इस विकल्प को अकेले ही सेट करना आपकी मदद नहीं करेगा, जैसा कि मैंने उपरोक्त उल्लेख किया है।

असल में बस cache:false; जोड़ें cache:false; एजेक्स में जहां आपको लगता है कि प्रगति के रूप में सामग्री बदल जाएगी। और वह जगह जहां सामग्री बदलती नहीं है, वहां आप इसे छोड़ सकते हैं। इस तरह से आपको हर बार नया जवाब मिलेगा

इंटरनेट एक्सप्लोरर का अजाक्स कैशिंग: आप इसके बारे में क्या करने जा रहे हैं? तीन तरीकों का सुझाव:

  1. क्वेरी स्ट्रिंग में एक कैश बस्टिंग टोकन जोड़ें, जैसे? Date = [टाइमस्टैम्प]। JQuery और YUI में आप उन्हें यह स्वचालित रूप से करने के लिए कह सकते हैं।
  2. एक जीईटी के बजाय पोस्ट का उपयोग करें
  3. एक HTTP प्रतिक्रिया हैडर जो विशेष रूप से ब्राउज़र को इसे कैश करने के लिए मना करता है भेजें

अब, यह आपके एजेक्स अनुरोध में कैश विकल्प को सक्षम / अक्षम करके इसे करना आसान है, जैसे कि यह

 $(function () { var url = 'your url goes here'; $('#ajaxButton').click(function (e) { $.ajax({ url: url, data: { test: 'value' }, cache: true, //cache enabled, false to reverse complete: doSomething }); }); }); //ToDo after ajax call finishes function doSomething(data) { console.log(data); } }); 

यदि आप IE 9 का उपयोग कर रहे हैं, तो आपको अपने नियंत्रक वर्ग परिभाषा के सामने निम्नलिखित का उपयोग करना होगा:

[आउटपुट कैचे (नस्टस्टोर = सच्चे, अवधि = 0, व्यरीबीपाराम = "*")]

सार्वजनिक कक्षा परीक्षण नियंत्रक: नियंत्रक

इससे ब्राउज़र को कैशिंग से रोका जा सकेगा।

इस लिंक पर विवरण: http://dougwilsonsa.wordpress.com/2011/04/29/disabling-ie9-ajax-response-caching-asp-net-mvc-3-jquery/

असल में इसने मेरी समस्या हल की

@ एथैश ने कहा, jQuery डॉक्स के अनुसार, $.ajaxSetup({cache:false}) GET और HEAD अनुरोधों के अलावा अन्य के लिए काम नहीं करेगा

आप किसी Cache-Control: no-cache को वापस भेजने से बेहतर हैं Cache-Control: no-cache अपने सर्वर से Cache-Control: no-cache हेडर वैसे भी। यह चिंताओं का एक क्लीनर अलग प्रदान करता है

बेशक, यह सेवा यूआरएल के लिए काम नहीं करेगा कि आप अपने प्रोजेक्ट से संबंधित नहीं हैं उस स्थिति में, आप क्लाइंट कोड से कॉल करने के बजाय सर्वर कोड से तृतीय पक्ष सेवा को प्रॉक्सी करने पर विचार कर सकते हैं

यदि आप नेट एएसपी MVC का उपयोग कर रहे हैं, तो निम्न बिंदु को अंत बिंदु फ़ंक्शन पर जोड़कर नियंत्रक कार्रवाई पर कैशिंग को अक्षम करें: [आउटपुट कैचेएट्रीब्यूट (VaryByParam = "*", अवधि = 0, नोस्टोर = सच)]

अनुरोध url को Math.random () जोड़ें