Как установить 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 () чтобы он знал, что с ним делать.

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

  1. делать это в глобальном масштабе с помощью метода ajaxsetup

  2. С помощью a .вызов ajax вместо a .получить звоните

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

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

7 66

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
});