2012-01-12 18 views
63

jQuery.get()jQuery.ajax() के लिए एक कॉल कॉल के साथ एक शॉर्टेंड है। लेकिन जब मैंने cache:false.get() कॉल के डेटा में cache:false सेट किया है, तो सर्वर को जो भेजा जाता है वह कैश नामक पैरामीटर होता है जो झूठी मान के साथ होता है। जबकि मेरा इरादा कैशिंग को रोकने के लिए सर्वर के साथ डेटा के साथ टाइमस्टैम्प भेजना है, तो अगर मैं jQuery.ajax डेटा में cache: false का उपयोग करता हूं तो क्या होता है। मैं फिर से लिखने मेरी jQuery.get कॉल jQuery.ajax करने के लिए कॉल याकैश कैसे सेट करें: jQuery.get कॉल में झूठी

$.ajaxSetup({ 
    // Disable caching of AJAX responses 
    cache: false 
}); 

अद्यतन का उपयोग किए बिना यह पूरा कैसे करूँ: धन्यवाद जवाब के लिए हर किसी को। तुम सब सही हो हालांकि, मैं उम्मीद कर रहा था कि कॉल प्राप्त करने का एक तरीका था कि आप यह जानना चाहते हैं कि आप कैश नहीं करना चाहते हैं, या उस मूल्य को अंतर्निहित .ajax() को भेज दें ताकि यह जान सके कि इसके साथ क्या किया जाए।

मैं ए। एक चौथाई तीन तरीके है कि अब तक पहचान की गई है के अलावा अन्य रास्ता तलाश:

  1. ajaxSetup

  2. के माध्यम से विश्व स्तर पर कर रहा एक .ajax कॉल के बजाय एक .Get कॉल का उपयोग

  3. अपने .get कॉल पर टाइमस्टैम्प रखने वाला नया पैरामीटर जोड़कर इसे मैन्युअल रूप से करना।

मैंने सोचा कि यह क्षमता .get कॉल में बनाई जानी चाहिए।

+1

का उपयोग कर पूर्ण 'मिल()' उदाहरण दिखाएं? – Jivings

+0

मुझे पृष्ठ के साथ फ़ाइल के दिनांक/समय को पास करना पसंद है (मान लीजिए कि मैं सर्वर-साइड स्क्रिप्टिंग भाषा का उपयोग कर रहा हूं), और फिर पृष्ठ के अनुरोध के साथ क्वेरीस्ट्रिंग पैरामीटर के रूप में पास करें। कारण यह है कि यह कैशिंग की अनुमति देता है, जब तक कि पृष्ठ वास्तव में बदल नहीं जाता है। – Archer

+1

कैश का उपयोग: झूठी AJAX/json अनुरोध के लिए टाइमस्टैंप जोड़ती है उदा। {"प्राप्त करें": "संशोधित"} और _ = 13 9 4836303603 जो मेरे एपीआई अनुरोधों को तोड़ दिया। टाइम्सस्टैम्प को जोड़ने में यह पता लगाने में बहुत अधिक घंटे लग गए, क्योंकि इसे jQuery दस्तावेज़ों में दफनाया गया है। कैश का उपयोग करने के बजाय: झूठी, बस अपना स्वयं का टाइमस्टैम्प जोड़ें, मान लें कि यदि आपका कोई अज्ञात पैरामीटर जोड़ता है तो आपका एपीआई परवाह नहीं करेगा। इस तरह: {"प्राप्त करें": "संशोधित", "टाइमस्टैम्प": "13 9 4836303603"} यह आपको कैश किए गए सामानों पर बेहतर नियंत्रण करने देता है, और जो नहीं हैं। –

उत्तर

34

मेरे लिए, इसे करने का सही तरीका सूचीबद्ध होगा। या तो ajax या ajaxSetup। यदि आप वास्तव में get का उपयोग करना चाहते हैं और ajaxSetup का उपयोग नहीं करते हैं तो आप अपना खुद का पैरामीटर बना सकते हैं और इसे वर्तमान दिनांक/समय का मान दे सकते हैं।

हालांकि मैं अन्य तरीकों में से किसी एक का उपयोग न करने में आपके उद्देश्यों पर सवाल उठाऊंगा।

+1

ध्यान देने योग्य है कि मेरे विशेष ऐप में, मैं कैश का उपयोग करता हूं: AJAXSetup में झूठा (मेरी अधिकांश कॉल पेलोड के लिए जेसन एंडपॉइंट्स हैं) और फिर मैं $ .ajax (..., कैश: सच) किसी भी विशिष्ट टेम्पलेट्स या चीजों के लिए जो मैं कैश करना चाहता हूं। मैं इसे वैसे भी पसंद करता हूं, क्योंकि यह चीजों को स्पष्ट करता है, और मैं स्थिर डेटा की तुलना में अधिक पेलोड कॉल को कॉल कर रहा हूं। – David

80

पैरामीटर स्वयं जोड़ें। मुझे लगता है कि आप के बजाय जो आप बंद कैशिंग चालू करने के लिए अनुमति देता है AJAX विधि का उपयोग करने के लिए है

$.get({ 
    url: url, 
    cache: false 
}).then(function(rdata){ 
    console.log(rdata); 
}); 
+5

धन्यवाद $ .now() नई तारीख()। GetTime() के लिए शॉर्टेंड है। http://api.jquery.com/jQuery.now/ – Barka

+0

अच्छा, यह काम करता है! :) – wooncherk

+0

अब आप 'date.now() 'भी कर सकते हैं। – Jivings

62

:

$.ajax({ 
    url: "test.html", 
    data: 'foo', 
    success: function(){ 
    alert('bar'); 
    }, 
    cache: false 
}); 

$.get(url,{ "_": $.now() }, function(rdata){ 
    console.log(rdata); 
}); 

jQuery 3.0 के रूप में, आप अब ऐसा कर सकते हैं

+2

आईई 9 कैश और वास्तव में पसंद नहीं है। – Ross

+4

@Ross यदि आप मेरे उत्तर के अनुसार 'झूठी' को 'झूठी' पर सेट करते हैं तो यह नहीं करना चाहिए। – Jivings

+2

3 साल बाद और मैंने ठीक उसी दिन एक ही समस्या के लिए आधा दिन खो दिया – Joel

7

JQuery दस्तावेज के अनुसार, .get() केवल url,लेता है 0 (सामग्री), dataType, और success कॉलबैक इसके पैरामीटर के रूप में। आप वास्तव में यहां क्या करना चाहते हैं, यह भेजने से पहले jqXHR ऑब्जेक्ट को संशोधित करता है। .ajax() के साथ, यह beforeSend() विधि के साथ किया जाता है। लेकिन चूंकि .get() एक शॉर्टकट है, इसलिए यह इसकी अनुमति नहीं देता है।

हालांकि कॉल को .get() कॉल पर स्विच करना अपेक्षाकृत आसान होना चाहिए। आखिरकार, .get() सिर्फ .ajax() का उप-समूह है, इसलिए आप .ajax() के लिए सभी डिफ़ॉल्ट मानों का उपयोग कर सकते हैं (बेशक, beforeSend() के लिए)।

संपादित करें:

:: Jivings 'जवाब ::

ओह, हाँ, cache पैरामीटर के बारे में भूल पर लग रहा है! जबकि beforeSend() अन्य शीर्षलेख जोड़ने के लिए उपयोगी है, अंतर्निहित cache पैरामीटर यहां कहीं अधिक सरल है।

+0

प्रयास के लिए उपरोक्त और एक अलग तरीके खोजने के लिए! :) – Jivings

1

मुझे खेल में बहुत देर हो चुकी है, लेकिन इससे दूसरों की मदद मिल सकती है। मैंने $ .get के साथ एक ही समस्या को मारा और मैं अंधेरे से कैशिंग बंद करना नहीं चाहता था और मुझे टाइमस्टैम्प पैच पसंद नहीं आया। तो थोड़ा सा शोध करने के बाद मैंने पाया कि आप $ .get की बजाय $ .post का उपयोग कर सकते हैं जो कैशिंग का उपयोग नहीं करता है। इतना ही आसान। :)

+0

मुझे भी देर हो चुकी है :) आपके योगदान के लिए धन्यवाद, यह ठीक काम कर रहा है –

+0

यह एक बुरी सलाह है क्योंकि जीईटी और पोस्ट अलग-अलग क्रियाएं हैं और विभिन्न चीजों के लिए इस्तेमाल किया जाना चाहिए। वही सर्वर यूआरएल क्रिया द्वारा फ़िल्टर किया जा सकता है, उदाहरण के लिए यदि सर्वर केवल जीईटी की अपेक्षा करता है तो एक पोस्ट काम नहीं करेगा। या इससे भी बदतर, सर्वर के पास GET और POST के लिए अलग-अलग व्यवहार हो सकते हैं (जो वास्तव में बहुत आम है)। – Andrew

2

सेट कैश: jQuery.get कॉल में झूठी विधि नीचे का उपयोग कर

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

या

निम्नलिखित, संचित हो रही के सभी भावी AJAX अनुरोध कर पाएगा चाहे कोई भी jQuery विधि के आप ($ .Get, $ .ajax, आदि)

$.ajaxSetup({ cache: false }); 
1

नोट का उपयोग कि कॉलबैक वाक्य रचना deprecated है:

डेप्रिकेशन सूचना

jqXHR.success(), jqXHR.error(), और jqXHR.complete() कॉलबैक jQuery 1.5 में पेश की गई विधियों को jQuery 1.8 के रूप में बहिष्कृत किया गया है। अपने कोड को अंतिम रूप से हटाने के लिए तैयार करें, jqXHR.done(), jqXHR.fail(), और jqXHR.always() का उपयोग करें।

यहाँ एक आधुनिक समाधान promise इंटरफ़ेस

$.ajax({url: "...", cache: false}).done(function(data) { 
    // data contains result 
}).fail(function(err){ 
    // error 
}); 
संबंधित मुद्दे