Как установить cache: false в jQuery.получить вызов
jQuery.get()
это сокращение для jQuery.ajax()
с вызовом get. Но когда я установил cache:false
данные .get()
вызов, то, что отправляется на сервер, является параметром Cache со значением false. В то время как мое намерение состоит в том, чтобы отправить метку времени с данными на сервер, чтобы предотвратить кэширование, что происходит, если я использую cache: false
в jQuery.данные ajax. Как мне это сделать, не переписывая мой jQuery.звонят на jQuery.ajax вызывает или использует
$.ajaxSetup({
// Disable caching of AJAX responses
cache: false
});
обновление: спасибо всем за ответ. Вы все правы. Тем не менее, я надеялся, что есть способ сообщить вызову get, что вы не хотите кэшировать или отправлять это значение в базовый .ajax () чтобы он знал, что с ним делать.
Я ищу четвертый путь, отличный от трех путей, которые были определены до сих пор:
делать это в глобальном масштабе с помощью метода ajaxsetup
С помощью a .вызов ajax вместо a .получить звоните
сделать это вручную, добавив новый параметр, содержащий метку времени для вашего .сделать звонок.
Я просто подумал, что эта возможность должна быть встроена в .сделать звонок.
7 ответов:
для меня, правильный способ сделать это было бы указано в списке. Либо
Я бы так же не использовать один из других методов.ajax
илиajaxSetup
. Если вы действительно хотите использоватьget
и не использоватьajaxSetup
затем вы можете создать ваш собственный параметр и присвойте ему значение текущей даты/времени.
добавить параметр самостоятельно.
$.get(url,{ "_": $.now() }, function(rdata){ console.log(rdata); });
как в jQuery 3.0, теперь вы можете сделать это:
$.get({ url: url, cache: false }).then(function(rdata){ console.log(rdata); });
Я думаю, что вы должны использовать метод AJAX вместо этого, который позволяет отключить кэширование:
$.ajax({ url: "test.html", data: 'foo', success: function(){ alert('bar'); }, cache: false });
согласно документации JQuery,
.get()
толькоurl
,data
(содержания),dataType
иsuccess
обратный вызов в качестве его параметров. То, что вы действительно хотите сделать здесь, - это изменить объект jqXHR перед его отправкой. С.ajax()
, это делается с помощьюbeforeSend()
метод. Но так как.get()
это ярлык, он не позволяет этого.это должно быть относительно легко переключить ваш
.ajax()
звонки.get()
вызовы. В конце концов,.get()
- Это просто подмножество.ajax()
, так вероятно, вы можете использовать все значения по умолчанию для.ajax()
(за исключением, конечно,beforeSend()
).Edit:
:: смотрит на Jivings ' ответ::
Ах да, забыл про
установить кэш: false в jQuery.получить вызов с помощью метода ниже
использовать новый
Date().getTime(),
что позволит избежать коллизий, если у вас нет нескольких запросов, происходящих в течение одной миллисекунды.или
следующее предотвратит кэширование всех будущих запросов AJAX, независимо от того, какой метод jQuery вы используете ($.получить.$ ,Аякс и др.)
$.ajaxSetup({ cache: false });
Я очень поздно в игре, но это может помочь другим. Я столкнулся с той же проблемой с $.get и я не хотел слепо отключать кэширование, и мне не понравился патч timestamp. Итак, после небольшого исследования я обнаружил, что вы можете просто использовать $.сообщение вместо $.получить, который не использует кэширование. Просто. :)
обратите внимание, что синтаксис вызова устаревший:
Уведомление Об Устаревании
jqXHR.успех(), jqXHR.ошибка(), и jqXHR.полный () обратный вызов методы, введенные в jQuery 1.5, устарели с jQuery 1.8. К подготовьте свой код для их последующего удаления, используйте jqXHR.сделанный(), jqXHR.fail (), и jqXHR.всегда() вместо этого.
здесь модернизированное решение с помощью
promise
интерфейс$.ajax({url: "...", cache: false}).done(function( data ) { // data contains result }).fail(function(err){ // error });