2010-10-30 26 views
5

मेरे पास एक सीएमएस है जिसमें मैं ऑब्जेक्ट्स की स्थिति बदल सकता हूं। प्रत्येक स्थिति बदलने के बाद AJAX कॉल ऑब्जेक्ट की पूरी सूची अद्यतन करता है। लेकिन दुर्भाग्य से कुछ डेटा कैश में संग्रहीत है और कोई भी परिवर्तन दिखाई नहीं दे रहा है। जावास्क्रिप्ट/अनुरोध/अन्य के साथ समाशोधन कैश को मजबूर करने का कोई तरीका है? मैंने $.ajax में 'कैश: झूठी' कोशिश की है लेकिन यह काम नहीं कर रहा है। ,कैश साफ़ करने के लिए फोर्स AJAX कॉल

$(".object-position").livequery("change", function() { 
    $("#objects-list input").attr('disabled', true); 
    var action = $(this).attr('name'); 
    var position = $(this).attr('value'); 
    var id = $(this).attr("id"); 
    var model = id.split("-")[0]; 
    var object_id = id.split("-")[1]; 

    $("#loader").show(); 
    $("#loader").fadeIn(200); 

    $.ajax({ 
     type: "POST", 
     async: true, 
     url: "/manage/update_position/", 
     data: "action=" + action + "&model=" + model + "&object_id=" + object_id + "&position=" + position, 
     dataType: "json", 
     success: function(data){ 
      $("#loader").fadeOut("fast", function() { 
       $("#loader").hide(); 
      }); 
      $("objects-list").html(data["html"]); 
      $("#message").show(); 
      $("#message").fadeIn(400).html('<span>'+data["message"]+'</span>'); 
      setTimeout(function(){ 
       $("#message").fadeOut("slow", function() { 
        $("#message").hide(); 
       }); 
      }, 1500); 
     } 
    }); 
    $("#objects-list input").attr("disabled", false); 
    return false; 
}); 

उत्तर

2

आप

$("objects-list").html(data["html"]); 

बजाय इस प्रयास करें है । तो .html() सामग्री प्रतिस्थापन के बाद, आपके पास <table...><table...> आदि होगा।

13

क्या cache: false करता अनुरोध डेटा के लिए समय जोड़ने के लिए है, इसलिए प्रत्येक अनुरोध को प्रभावी ढंग से अद्वितीय है और इसलिए:

http://ntt.vipserv.org/manage/playforward

और मेरे js:

यहां एक नमूना पृष्ठ है ब्राउज़र के कैश को छोड़ देता है। मुझे आश्चर्य है कि क्या आप किसी ऑब्जेक्ट की बजाय डेटा स्ट्रिंग का उपयोग कर रहे हैं, यहां समस्याएं पैदा हो रही हैं। बजाय एक वस्तु का उपयोग कर प्रयास करें:

$.ajax({ 
    type: "POST", 
    async: true, 
    url: "/manage/update_position/", 
    data: { 
     "action": action. 
     "model": model, 
     "object_id": object_id, 
     "position": position 
    }, 
    cache: false, 
    dataType: "json", 
    success: function(data){ 
     //[snip] 
    } 
}); 
+1

मैं पुष्टि करता हूं - यह वास्तव में काम करता है। कैश: झूठी यूआरएल में टाइमस्टैम्प जोड़ता है और इसके लिए धन्यवाद, हर बार नई सामग्री लोड हो जाती है। – alekwisnia

4

बस पृष्ठ को फिर से लोड ब्राउज़र का कैश का उपयोग नहीं कर के लिए मजबूर करने

url: "/manage/update_position/?nocache="+Math.random(), 

साथ

url: "/manage/update_position/", 

बदलें। ,

$(".objects-list").html(data["html"]); // forgot leading dot? 

भी तरह आप कुछ html कि <table> तत्व में ही शामिल साथ .objects-list तालिका की सामग्री को बदलने के लिए कोशिश कर रहे हैं ऐसा लगता है:

+1

जो आसानी से एक रूटिंग सिस्टम को पकड़ सकता है। यदि आप इसे मैन्युअल रूप से करने जा रहे हैं, तो इसे इसके बजाय एक अनुरोध पैरामीटर बनाएं: '"/ प्रबंधित/अपडेट_पॉजिशन /? Nocache =" + Math.random() ' – lonesomeday

+0

हां, आप बिल्कुल सही हैं। मैं अपनी मूल पोस्ट में ''? '' शामिल करना भूल गया था। यह होना चाहिए था: '//प्रबंधन/अद्यतन_पोजिशन /?" + Math.random(), ' – remi

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