Как установить кеш: 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
});