Как запретить браузеру кэшировать 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">