Как установить кеш: false в вызове jQuery.get

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

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

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

I a. ищет четвертый способ, отличный от трех способов, которые были определены до сих пор:

  • Выполнение этого процесса глобально через ajaxSetup

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

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

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

Ответ 1

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

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

Ответ 2

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

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

Как и в jQuery 3.0, вы можете сделать следующее:

$.get({
  url: url, 
  cache: false
}).then(function(rdata){
  console.log(rdata);
});

Ответ 3

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

$.ajax({
  url: "test.html",
  data: 'foo',
  success: function(){
    alert('bar');
  },
  cache: false
});

Ответ 4

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

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

Edit:

:: Посмотрим на ответ Jivings::

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

Ответ 5

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

Ответ 6

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

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

Или

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

$.ajaxSetup({ cache: false });

Ответ 7

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

Уведомление об отказе

Обратный вызов 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
});