Перехват 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-запрос на добавление товара в корзину, отправки формы и тд., вызывается соответствующий метод для отслеживания этого события в Яндекс.Метрике.