Перехват AJAX с помощью функции fetch (GET)
В этой статье мы рассмотрим код, который перехватывает AJAX-запросы (метод GET), отправляемые с помощью функции fetch, и выполняет определенные действия при успешном добавлении товара в корзину или отправки формы обратной связи.
Пример ajax (метод GET) на сайте wordpress
По нажатию на кнопку делаем запрос на добавление товара в корзину.
В консоли разработчика запрос будет выглядеть так: /wp-admin/admin-ajax.php?method=add_item
И мы хотим выполнить Яндекс-цель, если находим в URL строку method=add_item.
Код
1 | |
Объяснение кода
1. Определение констант
1 | |
Здесь мы определяем константы, которые используются в коде. Это улучшает читаемость и позволяет избежать “магических строк”. Константы включают:
SUCCESS_STATUS: статус ответа, указывающий на успешное выполнение запроса.ADD_ITEM_METHOD_ID: уникальный идентификатор для метода добавления товара.ADD_ITEM_METHOD_NAME: название метода, который будет вызван для обработки события.YM_TARGET: цель, которая будет передана в аналитику.
2. Список отслеживаемых URL
1 | |
Мы создаем массив объектов trackedUrls, который содержит информацию о том, какие запросы мы будем отслеживать. Каждый объект включает идентификатор, метод и цель для аналитики.
3. Сохранение оригинальной функции fetch
1 | |
Мы сохраняем оригинальную функцию fetch в переменной originalFetch, чтобы иметь возможность вызывать её позже.
4. Переопределение функции fetch
1 | |
Мы переопределяем метод fetch, чтобы добавить логику обработки после выполнения запроса. Внутри переопределенной функции:
- Клонирование ответа: Мы создаем клон ответа с помощью
response.clone(), так как объектResponseможет быть прочитан только один раз. - Получение URL: Из клонированного ответа извлекаем URL запроса.
- Цикл по
trackedUrls: Мы проходим по всем элементам вtrackedUrlsи проверяем, соответствует ли статус ответа значениюSUCCESS_STATUSи содержится ли идентификатор в URL. - Вызов метода: Если оба условия выполняются, вызываем метод, указанный в
trackedUrl.method, передавая емуtrackedUrl.ymTargetкак аргумент. - Обработка ошибок: Ошибки, возникающие в процессе выполнения, логируются в консоль.
5. Функция для работы с Яндекс.Метрикой
1 | |
Функция createAnalyticsMethods создает объект с методами для работы с Яндекс.Метрикой. В данном случае мы определяем метод addItem, который будет вызываться, когда товар добавляется в корзину. Он принимает targetId и вызывает функцию ym, передавая ей идентификатор Яндекс.Метрики, цель и идентификатор товара.
6. Инициализация analyticsMethods
1 | |
Здесь мы создаем объект analyticsMethods, вызывая функцию createAnalyticsMethods с идентификатором Яндекс.Метрики (в данном случае 12345678).
Итог
В результате, каждый раз, когда происходит успешный AJAX-запрос на добавление товара в корзину, отправки формы и тд., вызывается соответствующий метод для отслеживания этого события в Яндекс.Метрике.