To elaborate on 'cache-busting', basically, to do that, you can add any random string as a GET parameter, so just to check if it's your issue, replace
<script src="script.js">
with
<script src="script.js?<?php echo time();?>">
and see it that helps.
If it does, then you can further play with caching with .htaccess if it's Apache:
<filesMatch "\.(js|css)$">
FileETag None
<ifModule mod_headers.c>
Header unset ETag
Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
</ifModule>
<ifModule mod_expires.c>
ExpiresActive Off
</ifModule>
</filesMatch>
(that's like extreme no-cache-ever thing, you do NOT want to do that on production)
Or something like this in conf if it's nginx:
location ~* \.(?:css|js)$ {
expires off;
}
but then if gulp and elixir are used with versioning, this problem doesn't exist at all.