I am using jQuery to dynamically add a script to my page and it works, but jQuery appends \"_=TIMESTAMP\" to the URL causing the browser to never use the cache. With the fo
Here is something that works for me
// 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;
To answer your original question, you see the timestamp appended because jQuery by default sets cache: false
for script
and jsonp
calls which appends the timestamp to the URL.
To avoid the timestamp, you can do this:
$.ajaxPrefilter(function( options, originalOptions, jqXHR ) {
if ( options.dataType == 'script' || originalOptions.dataType == 'script' ) {
options.cache = true;
}
});
This sets up a global prefilter for all $.ajax
calls, including the ones made by jQuery while requesting the script
.
We inspect the dataType
to make sure we're not inadvertantly targetting other ajax calls and explicitly set cache
to true
. This will avoid the timestamp appending problem.
You can now use your original code and it'll pick it up from cache.
You can use $.ajax
to get the script instead of appending script tag
$.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
});