2010-04-16 13 views
16

मुझे इंटरनेट एक्सप्लोरर में किसी पृष्ठ के साथ कोई समस्या है। मेरे पास एक AJAX कॉल है जो किसी अन्य ब्राउज़र में एक फॉर्म कहता है, जब मैं उस लिंक पर क्लिक करता हूं जो इसे नियंत्रक में पास करता है और सही डेटा लोड करता है। लेकिन आईई में, जब इसे एक बार लोड किया जाता है, तो यह मुझे नियंत्रक में गुजरने के बिना वही पुराने परिणाम लाता है।इंटरनेट एक्सप्लोरर कैशिंग asp.netmvc AJAX परिणाम

+0

संभावित डुप्लिकेट [आईई 8 में AJAX परिणामों की अप्रत्याशित कैशिंग] (http://stackoverflow.com/questions/1013637/unexpected-caching-of-ajax-results-in-ie8) –

उत्तर

23

प्रयास करें:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 

यह लक्षण नियंत्रक वर्ग में रखा, कैशिंग अक्षम करता है। जब से मैं अपने आवेदन में कैशिंग की जरूरत नहीं है, मैं इसे अपने BaseController वर्ग में रखा: Improving Performance with Output Caching

तुम भी कार्रवाई पर रख सकते हैं:

[OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")] 
public abstract class BaseController : Controller 
{ 

यहाँ OutputCacheAttribute के बारे में अच्छा वर्णन है।

+0

यह समस्या नहीं होनी चाहिए क्योंकि कैशिंग केवल आईई –

+2

@ मैल्कम फ्रीक्सनर में होती है: कैशिंग रणनीति ब्राउज़र में भिन्न होती है। आईई के साथ कुछ समस्याएं हैं। – LukLed

9

आप false को cache विकल्प सेट करने की कोशिश कर सकते:

$.ajax({ 
    url: '/controller/action', 
    type: 'GET', 
    cache: false, 
    success: function(result) { 

    } 
}); 

यह विकल्प अनुरोध कैश करने के लिए नहीं ब्राउज़र बाध्य करेगा।


अद्यतन:

आप यूआरएल के लिए एक अनूठा टाइमस्टैम्प जोड़ सकता है टिप्पणी कैशिंग मुद्दों से बचने के आधार पर:

var d = new Date(); 
var myURL = 'http://myserver/controller/action?d=' + 
    d.getDate() + 
    d.getHours() + 
    d.getMinutes() + 
    d.getMilliseconds(); 
+0

ठीक है, मैं माइक्रोसॉफ्ट का उपयोग कर रहा हूँ अजाक्स, jQuery नहीं। ;) यह सेटिंग सभी AJAX आधारित कॉल के लिए काम करती है? msAjax के लिए भी? –

+0

ओह, क्षमा करें, मैंने आपके प्रश्न के इस महत्वपूर्ण भाग को याद किया है। –

+2

मैं इसे ऊपर उठा रहा हूं क्योंकि यदि आप jQuery का उपयोग कर रहे हैं तो यह सही जवाब है। वास्तव में, यदि आप jQuery का उपयोग कर रहे हैं और एमवीसी में एमएस अजाक्स हैंडलर नहीं हैं, तो आईई आपके द्वारा निर्धारित सभी विशेषताओं को पूरी तरह से अनदेखा कर देगा। – James

0

मुझे यह भी एक समान (लेकिन समान नहीं) मुद्दे पर बहुत उपयोगी पाया गया।

http://forums.asp.net/t/1681358.aspx/1?Disable+cache+in+Ajax+ActionLink+extension+method+in+asp+net+MVC

मूल रूप से सुनिश्चित करें कि आप पोस्ट का उपयोग कर रहे के रूप में अपने अनुरोध में प्राप्त करने के लिए विरोध करते हैं। ऐसा करने से आईई को कैशिंग से रोकना प्रतीत होता है।

उदाहरण के लिए:

@ Ajax.ActionLink ("स्पष्ट संपर्क", MVC.Home.ClearContacts(), नई AjaxOptions {HttpMethod = "पोस्ट", UpdateTargetId = "targetDiv"})

3

आप कर सकते हैं अपने AjaxOptions

var ajaxOpts = new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"}; 

इस exp की तरह पर HttpMethod = "POST" का उपयोग करें;

@Ajax.ActionLink("Text","ActionName", new AjaxOptions { UpdateTargetId = "TargetDiv", HttpMethod = "POST"}) 
0

आप अजाक्स हेल्पर का उपयोग कर रहे हैं, तो आप false इस तरह के AllowCache पैरामीटर सेट कर सकते हैं:

@Ajax.ActionLink("AjaxCall", "AjaxMethod", "DeconflictedFiles", 
       new { }, 
       new AjaxOptions 
       { 
        AllowCache = false, 
       }) 

और आईई कॉल के परिणामों को कैश नहीं होंगे।

0

वास्तव में आईई ब्राउज़र कैशिंग में स्वचालित रूप से साफ़ नहीं होता है। लेकिन काम कर रहे क्रोम स्क्रिप्ट में स्वीकार किए जाते हैं। इसलिए आपको ब्राउज़र स्तर में डेटा साफ़ करने की कोशिश करनी होगी।

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