Замена AJAX на Fetch API в WordPress Gutenberg

Почему стоит заменить AJAX на Fetch API в Gutenberg блоках

В WordPress традиционно для взаимодействия фронтенда с сервером используют AJAX-запросы на базе jQuery. Однако с ростом популярности современного JavaScript и стандартов браузеров Fetch API становится более удобным и мощным инструментом для работы с сетевыми запросами.

Fetch API предлагает более чистый и понятный синтаксис, поддержку Promise и улучшенную обработку ошибок. Кроме того, он позволяет отказаться от зависимости от jQuery, что ускоряет загрузку страниц и снижает вес скриптов.

В Gutenberg блоках, которые построены на React, использование Fetch API органично вписывается в архитектуру и позволяет писать более современный и читаемый код.

Как организовать вызовы Fetch API в Gutenberg блоках

Для начала важно помнить, что все AJAX-запросы в WordPress должны проходить через endpoint admin-ajax.php или REST API. В Gutenberg рекомендуется использовать REST API, но для примера мы покажем, как заменить AJAX-запросы на Fetch в admin-ajax.php.

В JavaScript коде блока вместо привычного jQuery.ajax используем функцию fetch:

fetch(ajaxurl, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
  },
  body: new URLSearchParams({
    action: 'wpboot_my_action',
    param1: 'value1'
  })
})
.then(response => response.json())
.then(data => {
  console.log('Ответ сервера:', data);
})
.catch(error => {
  console.error('Ошибка запроса:', error);
});

Обратите внимание, что для POST-запросов мы используем заголовок Content-Type и тело запроса формируем с помощью URLSearchParams, чтобы сервер корректно распознал данные.

Пример PHP-обработчика в functions.php

Для обработки запроса создадим функцию с префиксом wpboot_ и подключим её к AJAX-хукам:

add_action('wp_ajax_wpboot_my_action', 'wpboot_my_action_callback');
add_action('wp_ajax_nopriv_wpboot_my_action', 'wpboot_my_action_callback');

function wpboot_my_action_callback() {
    $param1 = isset($_POST['param1']) ? sanitize_text_field($_POST['param1']) : '';
    // Логика обработки запроса
    $result = [
        'success' => true,
        'received' => $param1,
        'message' => 'Запрос обработан успешно'
    ];
    wp_send_json($result);
}

Практические рекомендации по переходу с AJAX на Fetch в Gutenberg

1. Откажитесь от jQuery, если он не нужен. В Gutenberg блоках React и Fetch API позволяют обойтись без jQuery, что упрощает код и уменьшает нагрузку на сайт.

2. Используйте REST API, если возможно. REST API более гибкий и масштабируемый, однако если нужно быстро переделать существующий AJAX, Fetch API прекрасно подойдёт.

3. Обрабатывайте ошибки и статусы ответа. Fetch API не считает HTTP ошибки (например, 404) ошибками Promise, поэтому проверяйте response.ok перед обработкой данных.

fetch(ajaxurl, {...})
.then(response => {
  if (!response.ok) {
    throw new Error('Сетевая ошибка: ' + response.status);
  }
  return response.json();
})
.then(data => {...})
.catch(error => {...});

4. Безопасность. Не забывайте использовать wp_nonce_field и проверять нонсы на сервере для защиты от CSRF-атак.

Пример интеграции Fetch API с nonce в Gutenberg блоке

В PHP добавим генерацию nonce и локализацию скрипта:

function wpboot_enqueue_block_assets() {
  wp_enqueue_script('wpboot-block-script', get_template_directory_uri() . '/js/block.js', ['wp-element'], null, true);
  wp_localize_script('wpboot-block-script', 'wpbootData', [
    'ajaxurl' => admin_url('admin-ajax.php'),
    'nonce' => wp_create_nonce('wpboot_nonce')
  ]);
}
add_action('enqueue_block_editor_assets', 'wpboot_enqueue_block_assets');

В JS используем nonce в заголовках:

fetch(wpbootData.ajaxurl, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'X-WP-Nonce': wpbootData.nonce
  },
  body: new URLSearchParams({
    action: 'wpboot_my_action',
    param1: 'value1'
  })
})
.then(response => {
  if (!response.ok) {
    throw new Error('Ошибка сети: ' + response.status);
  }
  return response.json();
})
.then(data => {
  console.log(data);
})
.catch(error => {
  console.error(error);
});

В PHP проверяем nonce:

function wpboot_my_action_callback() {
  check_ajax_referer('wpboot_nonce', 'security');
  // обработка запроса
}

Полезные плагины для работы с AJAX и Fetch в WordPress

Хотя Fetch API сокращает необходимость в некоторых плагинах, для упрощения работы с AJAX и REST API можно использовать:

  • REST API Plugin — расширяет возможности REST API в WordPress.
  • Clearfy Pro — оптимизация и очистка WordPress, включая улучшение AJAX-запросов.

Использование современных технологий и правильная организация запросов существенно повышают производительность и устойчивость ваших Gutenberg блоков.

Как использовать REST API WordPress для создания простых приложений
10.11.2025
Как создать динамический фильтр по метаданным в WordPress
22.03.2026
Как использовать WooCommerce хуки для автоматизации изменений в корзине
26.06.2026
Почему не работают купоны в WooCommerce и как это исправить
25.04.2026
Как создать динамические виджеты в WordPress с примерами кода
26.03.2026