Надеюсь, все уже знакомы с примером работы ajax-ссылок в Друпал 7. Кто еще не успел познакомится, добро пожаловать туда :) Стоит знать, что такие ajax запросы отправляются на сервер методом POST. Его особенность заключается в том, что он не кешируется в браузере пользователя. Оно и хорошо - страницу мы забрали из кеша, а некоторые новые данные подтягиваем с сервера обновленными. Но иногда может возникнуть необходимость кешировать и результаты ajax запросов. Для этого логично проводить отправку запроса методом GET.
(function ($) {
Drupal.behaviors.get_ajax = {
attach: function (context, settings) {
//Ищем все новые ajax-ссылки (ссылки с классом get-ajax).
$('.get-ajax:not(.ajax-processed)').addClass('ajax-processed').each(function () {
var element_settings = {};
//задаем иконку загрузки.
element_settings.progress = { 'type': 'throbber' };
// путь загрузки и событие, по которому происходит загрузка ('click')
if ($(this).attr('href')) {
element_settings.url = $(this).attr('href');
element_settings.event = 'click';
}
var base = $(this).attr('id');
//Магия
Drupal.ajax[base] = new Drupal.ajax(base, this, element_settings);
Drupal.ajax[base].options.type = "GET";
var backup = Drupal.ajax.prototype.beforeSerialize;
Drupal.ajax.prototype.beforeSerialize = function (element, options) {
if (options.type != "GET") backup.call(this, element, options);
}
});
}
};
})(jQuery);
Как этим пользоваться?
Все как и с обычными ajax-ссылками, только помимо библиотек drupal.ajax (файл misc/ajax.js) и jquery.form(файл misc/form.js) еще подключаем js-файл с этим кодом. И в качестве класса для "активации" ajax-ссылки указывать не use-ajax, a get-ajax.
- 28.07.2015
- 93 просмотра