Заголовки кэша
Прежде всего, сервер, отвечающий на ваши вызовы jsonp, должен иметь некоторую дату окончания срока действия в заголовках ответа.Как вы упомянули, вы не контролируете, как youtube, flickr и т. Д. Отвечают на вызовы jsonp.
Кэш браузера
Браузер кэширует вызовы с помощью допустимые заголовки для каждого уникального URL .
jQuery JSONP Обратный вызов и идентификатор
jQuery отправляет две части данных, которые делают ваши URL уникальными. Если вы не измените эти две опции, ваши вызовы jsonp никогда не будут кэшироваться. Подробнее здесь
- Фактический обратный вызов = значение параметра, по которому ваши данные json дополняются с.Выглядит примерно так:
callback=jQuery_123971236127631276
. - Уникальный идентификатор, который делает каждый URL уникальным и, следовательно, не кэшируемым.Выглядит примерно так:
_=123918712387612398
.
Отключить уникальный обратный вызов JSONP
Параметру get с именем callback
присваивается случайное имя, сгенерированное jQuery, так что многие вызовы jsonp могут быть запущены одновременно, и ответы не будут мешатьдруг с другом.Тем не менее, это должно быть изменено, если вы хотите кэшировать определенный вызов jsonp.Атрибут jsonpCallback
используется для перезаписи этой функции.
$.jsonp({
url: url,
dataType: 'jsonp',
data: $.extend({ url: options.dataUrl, method: lookupData.method }, fixedOptions),
// Note: using success : function(){ ... } will not be
// called if 'jsonpCallback' attribute is set.
jsonpCallback : 'myCallback',
});
Отключение уникального идентификатора URL
Этот идентификатор URL установлен в списке параметров, поэтому каждый вызов уникален и выглядит следующим образом:...&_=1231981238712
.Удалить эту функцию можно, добавив атрибут cache : true
к вашим параметрам.
$.jsonp({
url: url,
dataType: 'jsonp',
data: $.extend({ url: options.dataUrl, method: lookupData.method }, fixedOptions),
// Note: using success : function(){ ... } will not be
// called if 'jsonpCallback' attribute is set.
jsonpCallback : 'myCallback',
// Disables: ... &_=1231829812386
cache : true
});