Публікації: 19
Обговоренняs: 6
Дата реєстрації: Apr 2025
Репутація:
0
Усім привіт. Я класичний PHP-бекндер, звик роками писати запити до бекенда на фронті через старий добрий `$.ajax` з jQuery. Але зараз всі кричать, що jQuery мертвий, а `XMLHttpRequest` (який під капотом AJAX) — це милиці з минулого століття.
Підкажіть, чим зараз прийнято замінювати AJAX при взаємодії з PHP бекендом? І чим ці нові інструменти реально кращі, крім того, що 'це модно'?
PHP Developer | Laravel | Symfony | Docker
Публікації: 20
Обговоренняs: 4
Дата реєстрації: Apr 2025
Репутація:
0
Привіт! Найстандартніша і найправильніша заміна — це нативний `fetch()`. Тобі більше не потрібно тягнути важку бібліотеку `jQuery` (яка важить ~80kb) тільки заради функції `$.ajax`. `fetch` вбудований у всі сучасні браузери.
Він працює на промісах (Promises), що робить код набагато чистішим: немає оцих вкладених `success` / `error` колбеків, які перетворюються на callback hell.
[code=javascript]
// Сучасний і чистий код
fetch('api/users.php')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error(err));
[/code]
Живу в [object Object]. Прошу не турбувати.
Публікації: 19
Обговоренняs: 6
Дата реєстрації: Apr 2025
Репутація:
0
@Yulia_JS, але ж у `fetch` є дурнувата проблема! Він не вважає HTTP-помилки (типу 404 або 500 від мого PHP-скрипта) за помилку `catch`. Мені потрібно вручну перевіряти `res.ok`, інакше проміс вважається успішним. У $.ajax `error` спрацьовував автоматично при 404. Це не виглядає як 'простіше'.
PHP Developer | Laravel | Symfony | Docker
Публікації: 26
Обговоренняs: 7
Дата реєстрації: Apr 2025
Репутація:
0
@Andriy_PHP, саме через цю специфіку фетча багато хто (і я теж) обирає **Axios**. Це малесенька бібліотека, яка вирішує всі болі `fetch`.
Вона автоматично відкидає проміс (кидає помилку) при статусах 400-500. Плюс, вона автоматично парсить JSON (не треба писати `res.json()`), має зручні інтерцептори (перехоплювачі запитів — ідеально для додавання CSRF-токенів чи JWT) і вміє відстежувати прогрес завантаження файлів (чого `fetch` довго не вмів).
[code=javascript]
try {
const { data } = await axios.get('api/data.php');
console.log(data); // одразу готовий об'єкт
} catch (error) {
console.error('Сервер повернув помилку:', error.response.status);
}
[/code]
Event Loop крутиться — лавеха мутиться. JS is everything. React / TypeScript / Vite
Публікації: 13
Обговоренняs: 4
Дата реєстрації: Apr 2025
Репутація:
0
Хлопці і дівчата, ви сперечаєтесь про інструменти для HTTP-запитів, але забуваєте про архітектуру. Якщо у вас SPA (Single Page Application) або складний дашборд на PHP, заміна AJAX на Fetch/Axios не вирішить головного — це все одно концепція 'запитав-отримав' (Polling).
Якщо потрібно, щоб PHP сервер САМ пушив дані на фронт (наприклад, статуси оплати, нові повідомлення), треба викидати AJAX і переходити на **WebSockets** (через Ratchet чи Swoole у PHP) або хоча б **SSE** (Server-Sent Events).
Кодую на PHP, поки інші сплять.
Публікації: 19
Обговоренняs: 6
Дата реєстрації: Apr 2025
Репутація:
0
@Petro_Backend, WebSockets для звичайного CRUD-додатка (отримати таблицю, видалити рядок) — це явний оверінжиніринг. Мені треба піднімати окремий воркер, тримати постійне з'єднання... Заради того, щоб просто форму відправити? Ні, дякую. Для чату згоден, але не для стандартного сайту.
PHP Developer | Laravel | Symfony | Docker
Публікації: 20
Обговоренняs: 4
Дата реєстрації: Apr 2025
Репутація:
0
@Andriy_PHP, повністю згодна, для звичайного сайту вебсокети не потрібні. Щодо твого аргументу про `fetch` і `res.ok` — так, це специфіка архітектури мережевих запитів. Зате ти отримуєш повний контроль (через `async / await` код читається вертикально, як синхронний PHP).
Якщо коротко підсумувати для тебе:
1. Пишеш ванільний скрипт без залежностей? => Бери **Fetch API**.
2. Великий проект на Vue/React з купою API-запитів? => Бери **Axios**.
3. Старий проект, де вже є jQuery? => Ну ок, можеш залишити **$.ajax**, нічого з ним не станеться. Але нові так краще не починати.
Живу в [object Object]. Прошу не турбувати.