Инструменты YSlow и Chrome dev будут предупреждать вас, если вы используете POST-запросы для AJAX - обычно GET должен быть предпочтительным методом, если вам действительно не нужно POST.
Вы можете отключить кэширование глобально, используя $.ajaxSetup(), например:
$.ajaxSetup({ cache:false});
Это добавляет временную метку к строке запроса при выполнении запроса. Чтобы отключить кэш для определенного $.ajax()вызова, установите cache: falseего локально, например:
Жаль, что я не видел этот глобальный пункт настройки раньше. Просто избавил меня от необходимости обновлять десятки отдельных звонков.
Джеймс Скемп
2
Я знаю, что это старый ответ, просто интересно, влияет ли это на все вызовы типа ajax (ajax, get и post) или только на конкретные вызовы ajax?
Lumpy
6
@Lumpy, согласно документации jQuery.ajax () , cache: falseбудет корректно работать только с HEAD и GET-запросами. Кроме того, если вы установите cache: falseв $.ajaxSetupсоответствии с документацией jQuery.ajaxSetup () , он «установит значения по умолчанию для будущих запросов Ajax». Так что да, он отключит кеш для всех будущих запросов HEAD и GET AJAX.
Джон Уошам
11
Предупреждение: это добавляет «? _ = Somenumber» к вашему URL. Убедитесь, что ваш сервер может игнорировать "_" в параметрах запроса URL.
4
+1 за cache: false. Выключение кэширования в глобальном масштабе кажется излишним, но иметь контроль над запросом - это прекрасно. Спасибо
ушел кодирование
21
Если вы устанавливаете уникальные параметры, то кеш не работает, например:
$.ajax({
url :"my_url",
data :{'uniq_param':(newDate()).getTime(),//other data}});
Приведенный выше код ajaxSetup у меня не сработал, и не потратил много времени на выяснение причин. Глобальные переменные плохие, и иногда вы хотите кэшировать. Этот ответ является лучшим на мой взгляд.
клинок
@bladefist вы, кажется, столкнулись с той же проблемой, что и я. Знаете ли вы, есть ли другие варианты, кроме изменения данных, чтобы IE прекратил кэширование? Причина, по которой я спрашиваю, состоит в том, что мои запросы на самом деле не используют «данные», и все данные идут вместе с URL.
Бадри
1
На самом деле, это именно то, что кеш должен делать за кулисами согласно этой информации из - api.jquery.com/jquery.ajax cache (по умолчанию: true, false для dataType 'script' и 'jsonp') Тип: Boolean Если установлено в false это заставит запрашиваемые страницы не кэшироваться браузером. Примечание. Установка для кэша значения false будет корректно работать только с запросами HEAD и GET. Это работает путем добавления "_ = {timestamp}" к параметрам GET.
Бадри
@bladefist Это ясно говорит, что он собирается добавить временную метку к параметрам GET. Вы удивляетесь, почему код, предоставленный Koss, работает для вас, а отключение локального или глобального кэша - нет?
Бадри
12
Cache-Control:no-cache,no-store
Эти два значения заголовка могут быть объединены, чтобы получить требуемый эффект как в IE, так и в Firefox.
Проблема в том, что IE не всегда слушает это, к сожалению :)
Ник Крейвер
1
@ Ник, это точно? я не проверял этот Cache-Control. Jquery Ajax chache работает на всех браузерах?
7
Это должно работать во всех браузерах, да ... но иногда IE просто любит кешировать вещи
Ник Крейвер
@Nick - Я установил для Ajax-кэша значение false. Но сообщение об успехе AJAX не попало в IE, а также в FF. Можете ли вы подтвердить мой код? мой код неверен? Спасибо var ajaxfile = base + "index.php / msc / popup_view /" + obj + "/" + id + "/" + no_tab; $ .ajax ({тип: "GET", url: ajaxfile, // contentType: "application / json; charset = utf-8", кеш: false, success: function (msg) {$ ("# popup"). html (msg);}});
САБУ
Я только что подтвердил, что IE11 игнорирует этот заголовок. Chrome также выдал ошибку CORS.
Ответы:
Вы можете отключить кэширование глобально, используя
$.ajaxSetup()
, например:Это добавляет временную метку к строке запроса при выполнении запроса. Чтобы отключить кэш для определенного
$.ajax()
вызова, установитеcache: false
его локально, например:источник
cache: false
будет корректно работать только с HEAD и GET-запросами. Кроме того, если вы установитеcache: false
в$.ajaxSetup
соответствии с документацией jQuery.ajaxSetup () , он «установит значения по умолчанию для будущих запросов Ajax». Так что да, он отключит кеш для всех будущих запросов HEAD и GET AJAX.cache: false
. Выключение кэширования в глобальном масштабе кажется излишним, но иметь контроль над запросом - это прекрасно. СпасибоЕсли вы устанавливаете уникальные параметры, то кеш не работает, например:
источник
cache
параметр уже делает за кадром.Эти два значения заголовка могут быть объединены, чтобы получить требуемый эффект как в IE, так и в Firefox.
источник
Вот ответное предложение:
http://www.greenvilleweb.us/how-to-web-design/problem-with-ie-9-caching-ajax-get-request/
Идея состоит в том, чтобы добавить параметр в ваш ajax-запрос, содержащий, например, текущую дату и время, чтобы браузер не смог его кешировать.
Посмотрите на ссылку, это хорошо объяснено.
источник
cache
параметр уже делает за кадром.Вы можете определить это так:
или вот так:
Надеюсь, поможет
источник
Это старый пост, но если IE доставляет вам неприятности. Измените ваши запросы GET на POST, и IE больше не будет их кешировать.
Я потратил слишком много времени на то, чтобы понять это трудным путем. Надеюсь, поможет.
источник
cache:false
в каждом конкретном случае это путь.