2011-08-14 9 views
13

का उपयोग नहीं करता है। मैं अपने पृष्ठ पर एक स्क्रिप्ट जोड़ने के लिए jQuery का उपयोग कर रहा हूं और यह काम करता है, लेकिन jQuery यूआरएल में "_ = TIMESTAMP" जोड़ता है जिससे ब्राउजर का कभी भी उपयोग नहीं होता है कैश निम्नलिखित कोड के साथ:jQuery के साथ गतिशील रूप से पृष्ठ पर एक स्क्रिप्ट जोड़ना कभी भी कैश्ड फ़ाइल

<!DOCTYPE html PUBLIC '-//W3C//DTD XHTML 1.0 Transitional//EN' 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd'> 
<html xmlns='http://www.w3.org/1999/xhtml'> 
<head> 
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js"></script> 
</head> 
<body> 
    <script type="text/javascript"> 
     $("head").append('<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js"></scr' + 'ipt>'); 
    </script> 
</body> 
</html> 

मैं फ़ायरबग में देख सकते हैं कि URL का अनुरोध किया है:

https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js?_=1313291978667 

किसी को भी पता है jQuery बताने के लिए ऐसा करने के लिए नहीं है?

धन्यवाद

+0

आप 'उपयोग कर सकते हैं jQuery के getScript' विधि बस एक टिप आप अपने यूआरएल का उपयोग करना चाहिए के रूप में पेज – ShankarSangoli

+0

पर js स्क्रिप्ट फ़ाइल प्राप्त करने के लिए है "https: //ajax.googleapis ..." के बजाय "//ajax.googleapis ..." से शुरू हो रहा है। क्योंकि यदि एसएसएल के माध्यम से आपका पृष्ठ एक्सेस नहीं किया गया है तो इससे कोई त्रुटि आएगी। ध्यान दें कि आपको जो यूआरएल मिल रही है उसे इस हैक का समर्थन करने की आवश्यकता है (Google सेवाएं करता है)। इससे यह सुनिश्चित होगा कि आपका पृष्ठ SSL पर और इसके बिना दोनों काम करता है। – Hoffmann

उत्तर

23

जोड़कर अपने मूल प्रश्न का उत्तर देने की स्क्रिप्ट प्राप्त करने के लिए, आप टाइमस्टैम्प संलग्न देखते हैं क्योंकि jQuery script और jsonp कॉल के लिए by default सेट cache: false जो यूआरएल में टाइमस्टैंप जोड़ता है।

टाइमस्टैम्प बचने के लिए आप यह कर सकते हैं:

$.ajaxPrefilter(function(options, originalOptions, jqXHR) { 
    if (options.dataType == 'script' || originalOptions.dataType == 'script') { 
     options.cache = true; 
    } 
}); 

यह jQuery द्वारा किए गए, जबकि script का अनुरोध सहित सभी $.ajax कॉल, के लिए एक वैश्विक prefilter सेट करता है।

हम यह सुनिश्चित करने के लिए dataType का निरीक्षण करते हैं कि हम अनजाने में अन्य AJAX कॉल को लक्षित नहीं कर रहे हैं और स्पष्ट रूप से cachetrue पर सेट कर रहे हैं। यह टाइमस्टैंप संलग्न समस्या से बच जाएगा।

अब आप अपने मूल कोड का उपयोग कर सकते हैं और यह इसे कैश से उठाएगा।

+0

उत्कृष्ट जवाब। जबकि दूसरे ने मेरे विशेष मामले के लिए काम किया, यह एक और पूरा जवाब है। –

+0

इससे मुझे धन्यवाद, धन्यवाद। सिर्फ पूर्णता के लिए: कि '' '' '' 'होना चाहिए। –

+0

@ चिप्स_100: फिक्स्ड। संकेत देने के लिए Thx! :) – Mrchief

7

आप $.ajax उपयोग कर सकते हैं बजाय स्क्रिप्ट टैग

$.ajax({ 
    url: "http://ajax.googleapis.com/ajax/libs/jquery/1.5/jquery.min.js", 
    dataType: "script", 
    cache: true,//This will decide whether to cache it or no so that it will not add the timestamp along with the request 
    success: function(){}//In the success handler you can write your code which uses resources from this js file ensuring the script has loaded successfully before using it 
}); 
+1

मुझे लगता है कि आप 'सत्य' का मतलब था, 'कैश' पर 'ट्यूर' नहीं। – OverZealous

+2

हां @ ओवरजियनल, धन्यवाद कि धन्यवाद। – ShankarSangoli

+0

आपका समाधान वही था जो मुझे चाहिए था, लेकिन मैंने इसे उत्तर के रूप में चिह्नित नहीं किया क्योंकि मैं अभी भी जानना चाहूंगा कि मूल समस्या को ठीक करने का कोई तरीका है या नहीं। इस विशेष मामले में, मैं सिर्फ स्क्रिप्ट लोड करना चाहता था, लेकिन अगर मैं एक AJAX अनुरोध से HTML लोड कर रहा था तो स्क्रिप्ट का उपयोग शामिल था? मैं अभी भी कैश का उपयोग करना चाहता हूं। –

4

यहाँ कुछ है कि मेरे लिए स्क्रिप्ट टैग जोड़कर करने के बजाय काम करता है

// Backup the jquery ajax cache setting 
var jQueryAjaxSettingsCache = jQuery.ajaxSettings.cache; 

// Disable the ?_=TIMESTAMP addition 
jQuery.ajaxSettings.cache = true; 

// Do the cached script inserting ... 
$("head").append('<script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.8.15/jquery-ui.min.js"></scr' + 'ipt>'); 

// Restore the jquery ajax cache setting 
jQuery.ajaxSettings.cache = jQueryAjaxSettingsCache; 
+0

यह काम करता है, धन्यवाद। –

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