Как запретить браузеру кэшировать json файл
Итак, я делаю этот маленький проект, и у меня возникают проблемы с ловлей. Одна вещь, которая не работает, - это браузер, который кэширует json файл, содержащий данные сохранения, и когда я обновляю json в другом месте, браузер возвращается к старой версии json файла, который он кэшировал, и читает это. К сожалению, я этого не хочу. Я не хочу, чтобы браузер полностью кэшировал файл, так что каждый раз, когда он загружает страницу, он будет запрашивать сервер для json файла и действовать в соответствии с этим файлом, а не с любым файлом, который он кэшировал. Тем не менее я хотел бы иметь возможность кэшировать все остальное, что на странице, но если это нужно пожертвовать для этого, то это жертва, которую я готов сделать. Я предполагаю, что в JavaScript, что будет вызов, который говорит, отменить текущий json файл и попросить сервер снова для него или что-то вроде
<script src="mySaveFiles.json" cache="no">
или что-то в этом роде, чтобы помочь мне достичь того, о чем я говорю... help?
Ответы
Ответ 1
Самый простой способ - добавить исходную строку с некоторым случайным параметром, который игнорируется на стороне сервера.
<script src="mySaveFiles.json?nocache=123" ></script>
Одним из решений было бы сгенерировать элемент script с использованием JavaScript и добавить текущее время следующим образом:
var el = document.createElement( script );
el.src = 'mySaveFiles.json?nocache=' + (new Date()).getTime();
document.head.appendChild( el );
Таким образом, браузер никогда не будет кэшировать JSON файл, поскольку он выглядит как отдельный файл (из-за параметра) в каждом вызове.
Ответ 2
Один из моих фаворитов - это просто htaccess (если это возможно для вас, я не вижу этого)
Отключить кеш для нескольких расширений
<FilesMatch ".(pl|php|cgi|spl|scgi|fcgi|json)$">
Header unset Cache-Control
</FilesMatch>
Отключить кеш всего за 1 расширение
<Files .json>
Header unset Cache-Control
</Files>
Я нашел его здесь: http://www.queness.com/post/5421/17-useful-htaccess-tricks-and-tips
Ответ 3
Два варианта:
- Добавьте параметр запроса mySaveFiles.json? t = timestamp в конец URL-адреса.
- Потяните файл с помощью объекта XmlHttpRequest (вам все равно может понадобиться добавить временную метку в зависимости от сервера).
Ответ 4
Если вы не хотите кэшировать какие-либо данные, вы можете использовать метатег ниже
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="expires" content="-1">