JQuery में getJSON के लिए कैश को कैसे सेट करें?


80

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

 $.ajaxSetup({
                cache: false
            })

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

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


जवाबों:


128

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

यह आपको भविष्य के सभी अजाक्स में कैश को अक्षम करने की अनुमति देगा

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

आशा है कि इससे सहायता मिलेगी :)


7
यह विश्व स्तर पर सेट है, जो बुरा है और अपने कार्यक्रम में अन्य ajax कॉल जो प्रभावित कर सकते हैं कर जरूरत कैशिंग
vsync

@helloChris - यहाँ jQuery से एक अच्छा स्पष्टीकरण है "दस्तावेज़ तैयार होने तक एक पृष्ठ को सुरक्षित रूप से हेरफेर नहीं किया जा सकता है। jQuery आपके लिए इस तत्परता की स्थिति का पता लगाता है। कोड $ (दस्तावेज़) के अंदर शामिल है। पहले से ही () केवल एक बार शामिल होगा। पृष्ठ कोड ऑब्जेक्ट मॉडल (DOM) निष्पादित करने के लिए जावास्क्रिप्ट कोड के लिए तैयार है। " READ के बारे में अधिक पढ़ें
हड्डियों को तोड़ना

7
@bonesnatch अधिकांश jQuery कोड की आवश्यकता होगी, सही, लेकिन उस सेटिंग का DOM से कोई लेना-देना नहीं है। दस्तावेज़ किसी भी स्थिति में हो सकता है जब आप उस सेटिंग को बनाते हैं और इससे कोई फर्क नहीं पड़ता, जहां तक ​​मैं बता सकता हूं। कोई पृष्ठ हेरफेर नहीं है।
क्रिस

इसे ट्रिगर की आवश्यकता क्यों है? कृपया बताएं कि यह मूल पोस्टर का उपयोग करने के तरीके पर काम क्यों नहीं करता है?
रूण जेप्पेसेन

2
उपयोग में अधिक एस्थेटिक तरीका; $ .ajaxSettings.cache = false;
मुस्तफा Mustakıroğlu

83

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

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

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

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

50

semente की और हड्डियों की पकड़ के जवाब सही हैं, लेकिन अगर आप $ .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 

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


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

यदि आप एज़्योर सीडीएन का उपयोग कर रहे हैं तो यह कोई समाधान नहीं है। यदि आप अतिरिक्त पैरामीटर भेजते हैं तो Azure कैश्ड ऑब्जेक्ट देता है
लेवे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.