Prevent jQuery from cache busting static assets

If the HTML that's returned from the `$.get` request contains a `<script src="..."/>` tag it loads the JavaScript file via ajax, and by default it attaches a timestamp to it to bust cache. That means the file loads every time the modal is opened, and the browser treats it as a new file each time. The result is that code fires multiple times and events listeners are added multiple times.
This commit is contained in:
Jonathan Rehm 2017-07-22 11:11:14 -07:00
parent d799b859ea
commit d85e0b96dc

View File

@ -4,6 +4,11 @@ var updateText;
$(function() {
// Allow ajax prefilters to be added/removed dynamically
// eslint-disable-next-line new-cap
const preFilters = $.Callbacks();
$.ajaxPrefilter(preFilters.fire);
function restartTimer() {
$("#spinner").addClass("hidden");
$("#RestartDialog").modal("hide");
@ -122,15 +127,24 @@ $(function() {
});
$("#bookDetailsModal")
.on("show.bs.modal", function(e) {
var $modalBody = $(this).find(".modal-body");
$.get(e.relatedTarget.href).done(function(content) {
$modalBody.html(content);
.on("show.bs.modal", function(e) {
const $modalBody = $(this).find(".modal-body");
// Prevent static assets from loading multiple times
const useCache = (options) => {
options.async = true;
options.cache = true;
};
preFilters.add(useCache);
$.get(e.relatedTarget.href).done(function(content) {
$modalBody.html(content);
preFilters.remove(useCache);
});
})
.on("hidden.bs.modal", function() {
$(this).find(".modal-body").html("...");
});
})
.on("hidden.bs.modal", function() {
$(this).find(".modal-body").html("...");
});
$(window).resize(function(event) {
$(".discover .row").isotope("reLayout");