2012-05-14 11 views
7

में कैश समय अगर हम $.ajax() में cache के लिए true पारित jQuery लोड डाटा को कैश होगा, मैं जानना चाहता हूँ वहाँ $.ajax() के लिए कैश समय बदलने के लिए किसी भी तरह से है? उदाहरण के लिए उदाहरण के लिए यदि AJAX ने 10 मिनट में jquery लोड पिछले डेटा का अनुरोध किया है, लेकिन 10 मिनट के बाद ताजा डेटा लोड करने के बाद अनुरोध किया गया है।बदलने jQuery

अद्यतन:

हम JSON डेटा कैश की जरूरत है, तो मैं JSON डेटाप्रकार में अजाक्स का उपयोग करना चाहिए

+1

10 मिनट के लिए सर्वर पर कैश हेडर सेट करें। – epascarello

+0

विन्सेंट के जवाब को पढ़कर इस प्रश्न से कुछ महत्वपूर्ण जानकारी गायब लगती है। ऐसा लगता है कि आप एक HTML संसाधन पर AJAX कॉल कर रहे हैं और परिणाम JSON \ -: – hippietrail

उत्तर

4

jQuery वास्तव में आप के लिए अनुरोध कैश नहीं करता है - जब आप false करने के लिए cache निर्धारित करते हैं, यह सिर्फ सेट कुछ शीर्षलेख और ब्राउज़र या किसी भी प्रॉक्सी को कैश प्रतिक्रिया लौटने से रोकने के लिए "कैश बस्टर" क्वेरी स्ट्रिंग वेरिएबल (उदाहरण के लिए, ?_=487262189472) पास करता है।

यदि आप 10 मिनट कैशिंग चाहते हैं, तो आप अपना खुद का आसानी से कार्यान्वित कर सकते हैं। जैसे,

var cacheBuster = new Date().getTime(); 
setInterval(function() { 
    cacheBuster = new Date().getTime(); 
}, 1000 * 60 * 10) 

तो बस है कि आपके अनुरोध को जोड़ने के एक क्वेरी स्ट्रिंग चर में (जैसे, ?_noCache=<cacheBuster>)।


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

$.ajaxPrefilter(function (options, originalOptions, jqXHR) { 
    var startChar = options.url.indexOf('?') === -1 ? '?' : '&'; 
    options.url += startChar + '_noCache=' + cacheBuster; 
}); 
+0

के रूप में परिणाम की उम्मीद कर रहे हैं क्या आप उन मामलों के बारे में जानते हैं जिनमें वास्तव में काम नहीं करेगा और अभी भी सर्वर पर नया अनुरोध प्राप्त होगा? – vsync

2

यह: यह एक अधिक पूर्ण समाधान बनाने के लिए, आपके द्वारा पारदर्शी रूप से वास्तविक अजाक्स कॉल करने के लिए सभी jQuery अजाक्स अनुरोध पर cacheBuster उपयोग कर सकते हैं का एक उदाहरण है jQuery की Deferred ऑब्जेक्ट का लाभ उठाने के लिए एक आदर्श खेल का मैदान की तरह लगता है।

यहाँ Addy उस्मानी और जूलियन Aubourg द्वारा एक महान लेख MSDN पर नहीं है: http://msdn.microsoft.com/en-us/magazine/gg723713.aspx

संक्षेप में

, वे एक उदाहरण वहाँ बताते हैं कि कैसे वे अनुरोध कैश, विशेष रूप से इस अनुरोध को हमेशा के लिए संचित किया जाएगा है।

var cachedPromises = {}; 

$.getCachedURL = function(url, callback) { 
    if (!cachedPromises[ url ]) { 
     cachedPromises[ url ] = $.Deferred(function(defer) { 
      $.get(url).then(defer.resolve, defer.reject); 
     }).promise(); 
    } 
    return cachedPromises[ url ].done(callback); 
}; 

और उसके बाद के रूप में ऐसी

$.getCachedURL(url).then(successCallback, errorCallback); 

स्थगित इसलिए यदि आप चाहते हैं कुछ यूआरएल केवल एक निश्चित समय हम मौजूदा कोड को संशोधित करने और की तर्ज पर कुछ कर सकते हैं के लिए कैश हो जाने को हल (ध्यान दें

var callback = function() { 
    console.log('callback', arguments) 
} 

var cacheTime = 3600; 

$.getCachedURL('/dynamic/config', callback, cacheTime).then(function() 
{ 
    console.log('success', arguments) 
}, function() 
{ 
    console.log('error', arguments) 
}); 
01: इस) मेरे सिर के ऊपर

var cachedPromises = {}; 
var cachedTimeouts = {}; 

$.getCachedURL = function(url, callback, cacheTime) { 
    if (!cachedPromises[ url ]) { 
     cachedPromises[ url ] = $.Deferred(function(defer) { 
      $.get(url).then(defer.resolve, defer.reject); 
     }).promise(); 
     cachedTimeouts[ url ] = setTimeout(function() { 
      clearTimeout(cachedTimeouts[ url ]); 
      delete cachedPromises[ url ]; 
     }, cacheTime); 
    } 
    return cachedPromises[ url ].done(callback); 
}; 

और एक कॉलबैक का उपयोग कर बंद है कि

जहां कॉलबैक पारंपरिक jQuery ajax उत्तराधिकारी/त्रुटि तर्क वापस आ जाएगी data, textStatus और jqXHR

आप JSON चाहते हैं $.get

$.get(url).then(defer.resolve, defer.reject); 
$.getJSON(url).then(defer.resolve, defer.reject); 

नोट के बजाय $.getJSON का उपयोग करें कि आप अभी भी सिर्फ इस्तेमाल कर सकते हैं $.ajax

$.ajax({ 
    url: url, 
    dataType: 'json', 
}).then(defer.resolve, defer.reject); 
+0

धन्यवाद, लेकिन मैं JSON डेटा प्राप्त करना चाहता हूं, यह फ़ंक्शन JSON डेटा को मेरे कॉलबैक – MajAfy

+0

पर पास नहीं करता है, मैंने एक अतिरिक्त उदाहरण के साथ अपना उत्तर अपडेट किया है जो आपको दिखाता है कि कैसे और क्या वापस हो जाता है। मैंने कुछ सिंटैक्स भी तय किए हैं, इसलिए कृपया उदाहरण दोबारा कॉपी करें। –

+0

धन्यवाद, कॉलबैक में तर्क HTML है, हमें JSON की आवश्यकता है, मुझे लगता है कि हमें '$ .getCachedURL' फ़ंक्शन – MajAfy

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