2012-05-01 15 views
5

मैं सर्वर से प्राप्त डेटा कैश करना चाहता हूं ताकि कम से कम PHP/MySQL निर्देश निष्पादित किए जा सकें। मुझे पता है कि कैश विकल्प स्वचालित रूप से $ .ajax() के लिए सेट है। हालांकि, मैं हर बार $ MyajQL निर्देश देख रहा हूं .ajax() को तब भी कहा जाता है जब पोस्टडाटा पिछले कॉल में जैसा ही था। क्या मैं कुछ भूल रहा हूँ? सर्वर से प्राप्त डेटा कैश करने का सबसे अच्छा तरीका क्या है?अजाक्स कॉल से प्राप्त डेटा कैश कैसे करें?

$.ajax({ 
... 
... 
cache : true 
}); 

उत्तर

4

यहां विचार है। निश्चित रूप से अपनी जरूरतों के लिए इसे ट्विक करें।

function getAjaxData(){ 
    var $node = $('#note_container'); 
    if ($node.data('ajax-cache').length == 0) { 
     $.ajax({ 
      // do stuff. 
      success: function(data){ 
       // Add dialog content 
       $node.html(data).data('ajax-cache',data).dialog(); 
      } 
     }); 
    } else { 
     $node.html($node.data('ajax-cache')).dialog(); 
    } 
} 
getAjaxData(); 
+0

में अपरिभाषित किया गया है डाउनवोट का कारण? क्या यह उत्तर उपयोगी नहीं था? – AlienWebguy

+0

यदि आप इसे देते हैं तो ब्राउज़र स्वयं कैशिंग को संभालता है। यदि यह दो बार एक ही अनुरोध को दोबारा करने का प्रयास करता है, तो यह सिर्फ अपने स्वयं के कैश का उपयोग करता है। ब्राउज़र आपके लिए कैशिंग को संभालने पर पहिया का फिर से आविष्कार क्यों करता है? – Adam

+0

यकीन नहीं है, मुझे एक अच्छी अवधारणा की तरह लगता है। तत्व पर इसे संग्रहीत करके, जब jQuery द्वारा तत्व हटा दिया जाता है तो यह स्वचालित रूप से साफ़ हो जाता है। –

0

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

+0

कैश पैरामीटर डिफ़ॉल्ट रूप से सत्य है। बस सुनिश्चित करने के लिए, जैसा कि आपने सुझाव दिया है, मैंने इसे सेट किया है। मैं अभी भी सर्वर द्वारा संसाधित किए जा रहे MySQL निर्देश देख रहा हूं। – Stephen305

4

मैं कैश खुद को संभालने होगा::,

// declare this on global scope 
var ajaxCache = {}; 
... 

if (!ajaxCache[this.id]) { 
    ajaxCache[this.id] = $.ajax({ 
     type: "POST", 
     url: "get_note.php", 
     data: {'pid':'<?php echo $project_id;?>','record_id':this.id} 
    }); 
} 

ajaxCache[this.id].done(function(){ 
    if (data != '0') { 
     // Add dialog content 
     $('#note_container').html(data); 
     $('#note_container').dialog(); 
    } else { 
     alert('woops'); 
    } 
}); 

इस तरह अगर साथ एक अनुरोध कहा

var postdata = {'pid':'<?php echo $project_id;?>', 
       'record_id':this.id}; 

$.ajax({ 
    type: "POST", 
    url: "get_note.php", 
    data: postdata 
}).done(function(data){ 
    if (data != '0') { 
     // Add dialog content 
     $('#note_container').html(data); 
     $('#note_container').dialog(); 
    } else { 
     alert(woops); 
    } 
}); 
+0

अच्छा। यह भी काम करेगा। – Stephen305

+0

लेकिन क्या कैश्ड डेटा लौटने पर deferred.done() विधि को फिर से कॉल किया जाएगा? – sivann

+0

कहा जाता है, नहीं, लेकिन आप इसे और अधिक कॉलबैक संलग्न कर सकते हैं और कॉलबैक तुरंत आग लगेंगे क्योंकि यह पहले ही हल हो चुका है। –

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