Как установить кеш: false в вызове jQuery.get - PullRequest
71 голосов
/ 12 января 2012

jQuery.get() является сокращением для jQuery.ajax() с вызовом get.Но когда я устанавливаю cache:false в данных вызова .get(), то что отправляется на сервер, это параметр с именем cache со значением false.Хотя я намерен отправить временную метку с данными на сервер, чтобы предотвратить кэширование, что и происходит, если я использую cache: false в данных jQuery.ajax.Как это сделать, не переписывая мои вызовы jQuery.get в вызовы jQuery.ajax или используя обновление

$.ajaxSetup({
    // Disable caching of AJAX responses
    cache: false
});

: спасибо всем за ответы.Вы все правы.Однако я надеялся, что есть способ сообщить о вызове get, что вы не хотите кэшировать, или отправить это значение в базовый .ajax (), чтобы он знал, что с ним делать.

Яищем четвертый путь, отличный от трех способов, которые были определены до сих пор:

  1. Выполнение глобально через ajaxSetup

  2. Использование .ajaxвызов вместо вызова .get

  3. Выполнение этого вручную путем добавления нового параметра, содержащего метку времени, к вашему вызову .get.

Я простодумал, что эта возможность должна быть встроена в вызов .get.

Ответы [ 7 ]

96 голосов
/ 13 января 2012

Добавьте параметр самостоятельно.

$.get(url,{ "_": $.now() }, function(rdata){
  console.log(rdata);
});

Начиная с jQuery 3.0, теперь вы можете сделать это:

$.get({
  url: url, 
  cache: false
}).then(function(rdata){
  console.log(rdata);
});
64 голосов
/ 13 января 2012

Я думаю, что вместо этого вы должны использовать метод AJAX, который позволяет отключить кэширование:

$.ajax({
  url: "test.html",
  data: 'foo',
  success: function(){
    alert('bar');
  },
  cache: false
});
35 голосов
/ 13 января 2012

Для меня правильный способ сделать это будет перечисленным. Либо ajax, либо ajaxSetup. Если вы действительно хотите использовать get, а не ajaxSetup, вы можете создать свой собственный параметр и присвоить ему значение текущей даты / времени.

Однако я бы поставил под сомнение ваши мотивы отказа от использования других методов.

7 голосов
/ 13 января 2012

Согласно документации JQuery, .get() принимает только обратные вызовы url, data (содержимое), dataType и success в качестве своих параметров. Здесь вы действительно хотите изменить объект jqXHR, прежде чем он будет отправлен. С .ajax() это делается методом beforeSend(). Но поскольку .get() является ярлыком, он не позволяет его.

Должно быть относительно легко переключить ваши .ajax() звонки на .get() звонки. В конце концов, .get() - это всего лишь подмножество .ajax(), так что вы, вероятно, можете использовать все значения по умолчанию для .ajax() (за исключением, конечно, beforeSend()).

Edit:

:: Смотрит на ответ Дживинга ::

Ах да, забыл про параметр cache! Хотя beforeSend() полезен для добавления других заголовков, встроенный параметр cache здесь намного проще.

2 голосов
/ 20 октября 2015

Установить кеш: false при вызове jQuery.get с использованием метода ниже

используйте новый Date().getTime(),, который позволит избежать коллизий, если у вас не будет нескольких запросов в течение одной миллисекунды.

Или

Следующее действие предотвратит кэширование всех будущих запросов AJAX независимо от того, какой метод jQuery вы используете ($ .get, $ .ajax и т. Д.)

$.ajaxSetup({ cache: false });
1 голос
/ 07 января 2016

Обратите внимание, что синтаксис обратного вызова устарел :

Примечание об устаревании

jqXHR.success (), jqXHR.error () и jqXHR.complete() методы обратного вызова, представленные в jQuery 1.5, устарели с jQuery 1.8.Чтобы подготовить ваш код к их возможному удалению, используйте взамен jqXHR.done (), jqXHR.fail () и jqXHR.always ().

Здесь модернизированное решение с использованием интерфейса promise

$.ajax({url: "...", cache: false}).done(function( data ) {
    // data contains result
}).fail(function(err){
    // error
});
0 голосов
/ 22 июля 2015

Я очень поздно в игре, но это может помочь другим. Я столкнулся с той же проблемой с $ .get, и я не хотел слепо отключать кеширование, и мне не понравился патч timestamp. Поэтому после небольшого исследования я обнаружил, что вы можете просто использовать $ .post вместо $ .get, который НЕ использует кеширование. Просто как тот. :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...