Internet Explorer में कैशिंग से jQuery Ajax अनुरोध को कैसे रोकें?


275

मैं इंटरनेट एक्सप्लोरर में कैशिंग से jQuery Ajax अनुरोध को कैसे रोक सकता हूं?


1
GET के बजाय POST का उपयोग कैशिंग को रोकता है। stackoverflow.com/questions/6216234/disable-ajax-caching
प्रशांत गुप्ता

8
यदि आप AJAX के लिए POST अनुरोधों का उपयोग करते हैं तो YSlow और Chrome देव टूल आपको चेतावनी देंगे - जब तक आपको वास्तव में POST की आवश्यकता नहीं है, तब तक GET को पसंदीदा तरीका होना चाहिए।
पावेल क्राकोविआक

जवाबों:


524

आप $.ajaxSetup()उदाहरण के लिए, विश्वव्यापी रूप से कैशिंग को अक्षम कर सकते हैं :

$.ajaxSetup({ cache: false });

अनुरोध करने पर यह क्लेमेस्टर में टाइमस्टैम्प को जोड़ देता है। किसी विशेष $.ajax()कॉल के लिए कैश को बंद करने के लिए , cache: falseइसे स्थानीय रूप से इस तरह सेट करें:

$.ajax({
  cache: false,
  //other options...
});

2
काश मैंने पहले यह ग्लोबल सेटअप आइटम देखा होता। बस मुझे दर्जनों व्यक्तिगत कॉल अपडेट करने से बचाया।
जेम्स स्कीप

2
मुझे पता है कि यह एक पुराना उत्तर है, बस यह सोचकर कि क्या यह कॉल (ajax, get and post) जैसे सभी ajax को प्रभावित करता है या केवल विशिष्ट ajax कॉल करता है?
लुम्पी

6
@Lumpy, jQuery.ajax () प्रलेखन के अनुसार , cache: falseकेवल HEAD और GET अनुरोधों के साथ सही ढंग से काम करेगा। इसके अलावा, आप निर्धारित करते हैं cache: falseमें $.ajaxSetup, के अनुसार jQuery.ajaxSetup () प्रलेखन , यह "भविष्य अजाक्स अनुरोधों के लिए सेट डिफ़ॉल्ट मान।" तो हाँ, यह भविष्य के सभी HEAD और GET AJAX अनुरोधों के लिए कैश को अक्षम कर देगा।
जॉन वाशम

11
सावधानी का एक शब्द: यह आपके URL में "? _ = Somenumber" जोड़ता है। सुनिश्चित करें कि आपका बैक एंड URL के क्वेरी पैरामीटर में "_" को अनदेखा कर सकता है।

4
के लिए +1 cache: false। विश्व स्तर पर कैशिंग को बंद करना ओवरकिल की तरह लगता है, लेकिन प्रति अनुरोध पर नियंत्रण रखना सही है। धन्यवाद
कोडिंग चला गया

21

यदि आप अद्वितीय पैरामीटर सेट करते हैं, तो कैश काम नहीं करता है, उदाहरण के लिए:

$.ajax({
    url : "my_url",
    data : {
        'uniq_param' : (new Date()).getTime(),
        //other data
    }});

13
यह वही है जो cacheपैरामीटर पहले से ही पर्दे के पीछे करता है।
जोस रुई सैंटोस

ऊपर ajaxSetup कोड मेरे लिए काम नहीं करता था, यह पता लगाने में ज्यादा समय नहीं लगा कि क्यों। वैश्विक चर खराब हैं, और कभी-कभी आप कैश करना चाहते हैं। यह जवाब मेरी राय में सबसे अच्छा है।
ब्लेडफिस्ट

@bladefist आपको लगता है कि मेरे जैसी ही समस्या है। क्या आप जानते हैं कि IE को कैशिंग रोकने के लिए डेटा बदलने के अलावा अन्य विकल्प हैं? कारण मैं पूछ रहा हूँ क्योंकि मेरे अनुरोध वास्तव में 'डेटा' का उपयोग नहीं करते हैं और सभी डेटा URL के साथ चलते हैं।
बद्री

1
वास्तव में, यह निश्चित रूप से इस जानकारी के अनुसार कैश को पर्दे के पीछे क्या करना चाहिए - api.jquery.com/jquery.ajax cache (डिफ़ॉल्ट: सत्य, डेटाटाइप 'स्क्रिप्ट' और 'jsonp' के लिए गलत) टाइप करें: Beanean यदि सेट है झूठे के लिए, यह अनुरोधित पृष्ठों को ब्राउज़र द्वारा कैश नहीं किया जाएगा। नोट: कैश को गलत पर सेट करना केवल HEAD और GET अनुरोधों के साथ सही ढंग से काम करेगा। यह जीईटी मापदंडों के लिए "_ = {टाइमस्टैम्प}" को जोड़कर काम करता है।
बद्री

@ब्लेडफिस्ट यह स्पष्ट रूप से कहता है कि यह जीईटी परिम के लिए टाइमस्टैप को जोड़ने जा रहा है। तो आश्चर्य है कि कोस द्वारा प्रदान किया गया कोड आपके लिए काम क्यों करता है और स्थानीय या वैश्विक कैश को अक्षम करता है?
बद्री

12
Cache-Control: no-cache, no-store

इन दो हेडर मूल्यों को IE और फ़ायरफ़ॉक्स दोनों पर आवश्यक प्रभाव प्राप्त करने के लिए जोड़ा जा सकता है


12
समस्या यह है कि आईई हमेशा दुर्भाग्य से इस बात सुनो नहीं है, है :)
निक Craver

1
@ निक, क्या यह सुनिश्चित है? मैंने इस कैश-कंट्रोल का परीक्षण नहीं किया। क्या Jquery Ajax chache सभी ब्राउज़र पर काम कर रही है?

7
यह चाहिए , हाँ सभी ब्राउज़रों पर काम ... लेकिन कभी कभी आईई सिर्फ बातें से बाहर नरक कैश करने के लिए पसंद करती है
निक Craver

@ क्लिक करें - मैंने ajax कैश को गलत पर सेट किया है। लेकिन ajax सफलता का संदेश IE में नहीं मिला और FF में भी। क्या आप मेरे कोड को सत्यापित कर सकते हैं? क्या मेरा कोड गलत है? धन्यवाद var ajaxfile = base + "index.php / msc / popup_view /" + obj + "/" + id + "/" + no_tab; $ .ajax ({प्रकार: "GET", url: ajaxfile, // contentType: "/ json; charset = utf-8", कैश: गलत, सफलता: फ़ंक्शन (msg) {$ ("पॉपअप")। html (संदेश);}});
SABU

मैंने अभी पुष्टि की है कि IE11 इस हेडर को अनदेखा करता है। Chrome ने एक CORS त्रुटि भी डाली।
लेनिन

5

यहाँ एक उत्तर का प्रस्ताव है:

http://www.greenvilleweb.us/how-to-web-design/problem-with-ie-9-caching-ajax-get-request/

विचार यह है कि आपकी ajax क्वेरी में एक पैरामीटर जोड़ने के लिए उदाहरण के लिए वर्तमान तिथि एक बार, इसलिए ब्राउज़र इसे कैश नहीं कर पाएगा।

लिंक पर एक नजर है, यह अच्छी तरह से समझाया गया है।


13
यह वही है जो cacheपैरामीटर पहले से ही पर्दे के पीछे करता है।
जोस रुई सैंटोस

1

आप इसे इस तरह परिभाषित कर सकते हैं:

let table = $('.datatable-sales').DataTable({
        processing: true,
        responsive: true,
        serverSide: true,
        ajax: {
            url: "<?php echo site_url("your url"); ?>",
            cache: false,
            type: "POST",
            data: {
                <?php echo your api; ?>,
            }
        }

या इस तरह:

$.get({url: <?php echo json_encode(site_url('your api'))?>, cache: false})

आशा करता हूँ की ये काम करेगा


-4

यह एक पुरानी पोस्ट है, लेकिन अगर IE आपको परेशानी दे रहा है। अपने GST अनुरोधों को POST में बदलें और IE उन्हें अब कैश नहीं करेगा।

मैं इस तरह से बहुत मुश्किल समय लगा रहा था। आशा करता हूँ की ये काम करेगा।


मुझे नहीं लगता कि आपको HTTP क्रियाओं का दुरुपयोग करना चाहिए। cache:falseकेस-बाय-केस आधार पर सेटिंग जाने का तरीका है।
tommybond
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.