Підручник PHP Ajax із прикладом

⚡ Розумний підсумок

Ajax у PHP дозволяє веб-сторінці обмінюватися невеликими обсягами даних із сервером та оновлювати частину сторінки без повного перезавантаження. У цьому покроковому посібнику створено пошук у фреймворку, що працює в режимі реального часу, пояснюючи класичний підхід XMLHttpRequest та сучасну альтернативу Fetch API.

  • 🔄 Що таке Аякс: Ajax, асинхронний JavaСкрипт та XML оновлюють частину сторінки, обмінюючись даними із сервером без повного оновлення.
  • Навіщо це використовувати: Ajax забезпечує багаті, схожі на настільні функції, такі як автозаповнення, перевірка в реальному часі та залежні випадаючі списки.
  • 🖥️ Клієнт і сервер: JavaСкрипт виконується у браузері та викликає PHP-скрипт, який повертає лише дані, необхідні для оновлення сторінки.
  • 🔍 Живий пошук: Обробник onkeyup надсилає кожне натискання клавіші до PHP-скрипта, який миттєво повертає відповідні назви фреймворків.
  • 📜 XMLHttpRequest: Класичний підхід створює об'єкт XMLHttpRequest та зчитує responseText після завершення запиту.
  • 🆕 API отримання: Сучасний код замінює XMLHttpRequest функцією fetch на основі обіцянок для чистіших та зручніших для читання запитів.
  • 🤖 AI Assist: Інструменти штучного інтелекту можуть конвертувати старий код XMLHttpRequest у fetch або axios та допомагати налагоджувати невдалі Ajax-запити.

PHP Аякс

Що таке Ajax?

AJAX означає асинхронний JavaScript & XML. Це технологія, яка зменшує взаємодію між сервером і клієнтом. Вона досягає цього, оновлюючи лише частину веб-сторінки, а не всю сторінку. Асинхронні взаємодії ініціюються JavaСкрипт. Мета AJAX — обмін невеликими обсягами даних із сервером без оновлення сторінки.

JavaScript — це клієнтська мова сценаріїв. Вона виконується на стороні клієнта веббраузерами, які підтримують JavaСценарій. JavaКод сценарію працює лише в браузерах, які мають JavaСценарій увімкнено.

XML – це абревіатура від Extensible Markup Language (розширювана мова розмітки). Вона використовується для кодування повідомлень як у людському, так і в машинному форматах. Вона схожа на HTML, але дозволяє створювати власні теги. Докладніше про XML див. у статті про XML.

Навіщо використовувати AJAX?

  • Це дозволяє розвиватиping багаті, інтерактивні веб-додатки, такі ж, як і настільні додатки.
  • Перевірку можна виконати, коли користувач заповнює форму, не надсилаючи її. Цього можна досягти за допомогою автозаповнення. Слова, які вводить користувач, надсилаються на сервер для обробки, а сервер відповідає ключовими словами, що відповідають введеному користувачем запиту.
  • Його можна використовувати для заповнення випадаючого списку залежно від значення іншого випадаючого списку.
  • Дані можна отримати з сервера, і оновити лише певну частину сторінки, не завантажуючи всю сторінку. Це дуже корисно для частин веб-сторінки, які завантажують такі речі, як:
    • Tweets
    • Коментарі
    • Користувачі, які відвідують сайт, та аналогічні дані в реальному часі.

Як створити PHP Ajax-додаток

Ми створимо просту програму, яка дозволить користувачам шукати популярні фреймворки PHP MVC.

У нашому застосунку буде текстове поле, куди користувачі вводитимуть назви фреймворків.

Потім ми використаємо AJAX для пошуку відповідності, а потім відобразимо повну назву фреймворку одразу під формою пошуку.

Крок 1) Створення індексної сторінки

index.php

<html>

<head>

<title>PHP MVC Frameworks - Search Engine</title>

<script type="text/javascript" src="auto_complete.js"></script>

</head>

<body>

<h2>PHP MVC Frameworks - Search Engine</h2>

<p><b>Type the first letter of the PHP MVC Framework</b></p>

<form method="POST" action="index.php">

<p><input type="text" size="40" id="txtHint" onkeyup="showName(this.value)"></p>

</form>

<p>Matches: <span id="txtName"></span></p>

</body>

</html>

ТУТ,

  • “onkeyup=”showName(this.value)”” виконує JavaФункція скрипта showName щоразу, коли в текстовому полі вводиться клавіша. Ця функція називається автозаповненням.

Крок 2) Створення сторінки фреймворків

frameworks.php

<?php

$frameworks = array("CodeIgniter","Zend Framework","Cake PHP","Kohana") ;

$name = $_GET["name"];

if (strlen($name) > 0) {

$match = "";

for ($i = 0; $i < count($frameworks); $i++) {

if (strtolower($name) == strtolower(substr($frameworks[$i], 0, strlen($name)))) {

if ($match == "") {

$match = $frameworks[$i];

} else {

$match = $match . " , " . $frameworks[$i];

}

}

}

}

echo ($match == "") ? 'no match found' : $match;

?>

Крок 3) Створення JS-скрипту

auto_complete.js

function showName(str){

if (str.length == 0){ // exit function if nothing has been typed in the textbox

document.getElementById("txtName").innerHTML=""; // clear previous results

return;

}

if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari

xmlhttp=new XMLHttpRequest();

} else {// code for IE6, IE5

xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");

}

xmlhttp.onreadystatechange=function() {

if (xmlhttp.readyState == 4 && xmlhttp.status == 200){

document.getElementById("txtName").innerHTML=xmlhttp.responseText;

}

}

xmlhttp.open("GET","frameworks.php?name="+str,true);

xmlhttp.send();

}

ТУТ,

  • «if (str.length == 0)» перевіряє довжину рядка. Якщо вона дорівнює 0, то решта скрипта не виконується.
  • «якщо (window.XMLHttpRequest)…» Internet Explorer версій 5 та 6 використовують ActiveXObject для реалізації AJAX. Інші версії та браузери, такі як Chrome та Firefox використовуйте XMLHttpRequest. Цей код гарантує, що наша програма працюватиме як в IE 5 та 6, так і в сучасних браузерах.
  • «xmlhttp.onreadystatechange=function…» перевіряє, чи завершено взаємодію AJAX, і чи є статус 200, а потім оновлює діапазон txtName повернутими результатами.

Крок 4) Тестування нашої програми PHP Ajax

Припускаючи, що ви зберегли файл index.php у phptuts/ajax, перейдіть до URL http://localhost/phptuts/ajax/index.php

Тестування нашої програми PHP Ajax

Введіть літеру C у текстове поле. Ви отримаєте такі результати.

Тестування нашої програми PHP Ajax

Наведений вище приклад демонструє концепцію AJAX та те, як вона може допомогти нам створювати багатофункціональні, інтерактивні додатки.

Сучасний AJAX з Fetch API

Об'єкт XMLHttpRequest, наведений вище, все ще працює, але його гілка ActiveXObject для старого Internet Explorer більше не потрібна. Сучасні браузери надають API Fetch на основі обіцянок, який виконує той самий запит із набагато меншим кодом.

function showName(str) {
    if (str.length === 0) {
        document.getElementById("txtName").innerHTML = "";
        return;
    }
    fetch("frameworks.php?name=" + encodeURIComponent(str))
        .then(response => response.text())
        .then(text => {
            document.getElementById("txtName").innerHTML = text;
        });
}

Ця версія виконує ту саму роботу: вона надсилає введений текст до frameworks.php та поміщає відповідь у діапазон txtName. Вона також використовує encodeURIComponent для безпечного екранування вхідних даних, а її ланцюжок промісів легко розширити за допомогою обробки помилок за допомогою блоку catch.

Поширені запитання

Синхронний запит блокує браузер, доки сервер не відповість, заморожуючи сторінку. Асинхронний запит виконується у фоновому режимі, тому сторінка залишається адаптивною та оновлюється, коли надходять дані. Ajax використовує асинхронну модель.

За допомогою fetch передайте другий метод встановлення аргументів POST та тіло запиту, потім зчитайте $_POST у PHP. За допомогою XMLHttpRequest викличте open('POST', url), встановіть заголовок Content-Type та надішліть закодовані дані.

CORS (Cross-Origin Resource Sharing) блокує запити браузера до іншого домену, якщо цей сервер не надсилає правильний заголовок Access-Control-Allow-Origin. Додайте заголовок на стороні PHP або викличте метод same-origin. URL виправити.

Так. Вставте код XMLHttpRequest, і штучний інтелект зможе переписати його за допомогою API-інтерфейсу fetch на основі обіцянок або Axios, додати обробку помилок та зберегти ту саму поведінку. Перевірте результат, оскільки обробка відповідей дещо відрізняється.

Так. Поділіться кодом запиту та консоллю браузера або помилкою мережі, і штучний інтелект зможе виявити помилку. URL, блок CORS, відсутній параметр або помилку сервера, тоді запропонуйте виправлення, яке варто спробувати.

Підсумуйте цей пост за допомогою: