2012-11-15 11 views
62

मैं सर्वर पक्ष से परिणामों को लाने के लिए getJSON का उपयोग कर रहा हूं लेकिन ब्राउज़र कैश समस्याओं का सामना कर रहा हूं। मैं चाहता हूं कि कैश झूठा हो। मैंने अपने getJSON कॉल से पहले इसका उपयोग करने का प्रयास किया।JQuery में getJSON के लिए कैश झूठी कैसे सेट करें?

$.ajaxSetup({ 
       cache: false 
      }) 

लेकिन मुझे अपेक्षित परिणाम नहीं मिल रहे हैं। यह अभी भी पुराने परिणाम दिखाता है। किसी भी मदद की सराहना की जाएगी।

मैंने कुछ अन्य समाधानों की भी पहचान की जैसे कि .ajax का उपयोग करना, लेकिन मैं वास्तव में इसका उपयोग नहीं करना चाहता हूं।

उत्तर

105

आपके कोड को सक्षम करने के लिए बस एक ट्रिगर की आवश्यकता है।

यह आपको भविष्य की सभी ajax

$(document).ready(function() { 
    $.ajaxSetup({ cache: false }); 
}); 

में कैश को निष्क्रिय करने की अनुमति देगा आशा है कि यह मदद करता है :)

+5

यह वैश्विक स्तर पर सेट करता है, जो खराब है और आपके प्रोग्राम में अन्य AJAX कॉल को प्रभावित कर सकता है जो ** ** ** कैशिंग – vsync

+1

कैश की आवश्यकता क्यों है आप उस विकल्प को सेट करने के लिए $ (दस्तावेज़) पहले से इंतजार करेंगे? –

+0

@helloChris - यहां jQuery से एक अच्छा स्पष्टीकरण है "दस्तावेज़ तैयार होने तक एक पृष्ठ को सुरक्षित रूप से छेड़छाड़ नहीं किया जा सकता है।" JQuery आपके लिए तैयारी की स्थिति का पता लगाता है। कोड $ (दस्तावेज़) .ready() के अंदर शामिल है पृष्ठ दस्तावेज़ ऑब्जेक्ट मॉडल (डीओएम) निष्पादित करने के लिए जावास्क्रिप्ट कोड के लिए तैयार होने के बाद ही चलाएगा। " [एपीआई के बारे में और पढ़ें] (https://learn.jquery.com/using-jquery-core/document-ready/) – bonesnatch

73

आप या तो इस का उपयोग कर सकते है कि कैश विश्व स्तर पर अक्षम हो जाएगी:

$(document).ready(function() { 
    $.ajaxSetup({ cache: false }); 
}); 

या, $.getJSON के बजाय, इस अनुरोध के लिए कैश को अक्षम करने के लिए:

$.ajax({ 
    cache: false, 
    url: "/path/to.json", 
    dataType: "json", 
    success: function(data) { 
     ... 
    } 
}); 
29

सिमेंट और बोन्सनेच के उत्तर सही हैं, लेकिन यदि आप $ .getJSON और अन्य जगहों का उपयोग करना चाहते हैं तो इसका कैशिंग का लाभ उठाएं (आप सभी कॉलों के लिए कैश को झूठी सेट नहीं करना चाहते हैं), लेकिन आप बस्ट करना चाहते हैं केवल एक कॉल के लिए कैश, आप $ .getJSON() की डेटा प्रॉपर्टी में टाइमस्टैम्प इंजेक्ट कर सकते हैं। अनुरोध की क्वेरी स्ट्रिंग में एक अनन्य मान जोड़कर, अनुरोध हमेशा अद्वितीय होगा और ब्राउजर द्वारा कैश नहीं किया जाएगा - आपको हमेशा नवीनतम डेटा मिल जाएगा।

लांग संस्करण:

var ts = new Date().getTime(); 
var data = {_: ts}; 
var url = '/some/path.json'; 

$.getJSON(url, data); 

सभी एक संस्करण में:

$.getJSON('/some/path', {_: new Date().getTime()}); 

निम्नलिखित अनुरोध में दोनों परिणाम:

/some/path.json?_=1439315011130 

जहां अंत में संख्या के लिए टाइमस्टैम्प है जिस क्षण कोड कहा जाता है और इसलिए हमेशा अद्वितीय होगा।

+1

मैं पूछे गए समस्या का सबसे अच्छा समाधान दूर और दूर कहूंगा। आपको अपनी जावास्क्रिप्ट को बदलने की जरूरत नहीं है, फ़ंक्शन में पास करने के लिए वैश्विक कॉन्फ़िगरेशन में बदलाव नहीं करना एक साधारण अतिरिक्त पैरामीटर है। –

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