Учебное пособие по PHP Ajax с примером

⚡ Умное резюме

Ajax в PHP позволяет веб-странице обмениваться небольшими объемами данных с сервером и обновлять часть страницы без полной перезагрузки. В этом пошаговом руководстве показан пример использования фреймворка для поиска в реальном времени, объясняется классический подход с использованием XMLHttpRequest и современная альтернатива — Fetch API.

  • 🔄 Что такое Ajax: Аджакс, асинхронный JavaСкрипт и XML-код позволяют обновлять часть страницы путем обмена данными с сервером без полной перезагрузки страницы.
  • Зачем это использовать: Технология Ajax обеспечивает работу множества функций, аналогичных тем, что доступны на настольных компьютерах, таких как автозаполнение, проверка данных в реальном времени и выпадающие списки с зависимостями.
  • 🖥️ Клиент и сервер: JavaСкрипт запускается в браузере и вызывает PHP-скрипт, который возвращает только те данные, которые необходимы для обновления страницы.
  • 🔍 Живой поиск: Обработчик события onkeyup отправляет каждое нажатие клавиши PHP-скрипту, который мгновенно возвращает соответствующие названия фреймворков.
  • 📜 XMLHttpRequest: Классический подход создает объект XMLHttpRequest и считывает responseText после завершения запроса.
  • 🆕 API для получения данных: В современном коде XMLHttpRequest заменяется функцией fetch, основанной на промисах, что обеспечивает более чистые и читаемые запросы.
  • 🤖 AI-помощь: Инструменты искусственного интеллекта могут преобразовывать старый код XMLHttpRequest в fetch или xios и помогать в отладке неудачных Ajax-запросов.

PHP Ajax

Что такое Аякс?

AJAX означает асинхронный JavaСценарий XML. Это технология, которая уменьшает взаимодействие между сервером и клиентом. Она делает это, обновляя только часть веб-страницы, а не всю страницу целиком. Асинхронное взаимодействие инициируется JavaСкрипт. Цель AJAX — обмен небольшими объемами данных с сервером без перезагрузки страницы.

JavaСценарий Это язык сценариев на стороне клиента. Он выполняется на стороне клиента веб-браузерами, поддерживающими этот язык. JavaСценарий. JavaКод скрипта работает только в браузерах, в которых есть JavaСкрипт включен.

XML XML — это аббревиатура от Extensible Markup Language (расширяемый язык разметки). Он используется для кодирования сообщений как в удобочитаемом для человека, так и в машиночитаемом формате. Он похож на HTML, но позволяет создавать собственные пользовательские теги. Более подробную информацию об XML см. в статье о XML.

Зачем использовать AJAX?

  • Это позволяет разрабатыватьping Многофункциональные интерактивные веб-приложения, ничем не уступающие настольным приложениям.
  • Проверка может выполняться по мере заполнения пользователем формы без ее отправки. Этого можно добиться с помощью автозаполнения. Слова, которые вводит пользователь, отправляются на сервер для обработки, и сервер отвечает ключевыми словами, соответствующими введенным пользователем данным.
  • Его можно использовать для заполнения выпадающего списка в зависимости от значения другого выпадающего списка.
  • Данные можно получить с сервера, и при этом обновлять только определенную часть страницы, не загружая всю страницу целиком. Это очень полезно для частей веб-страницы, которые загружают, например:
    • твиты
    • Комментарии
    • Пользователи, посещающие сайт, и аналогичные данные в режиме реального времени.

Как создать 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) Создание страницы фреймворков

framework.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, то остальная часть скрипта не выполняется.
  • “if (window.XMLHttpRequest)…” В Internet Explorer версий 5 и 6 для реализации AJAX используется ActiveXObject. Другие версии и браузеры, такие как Chrome и другие, используют AJAX. Firefox Используйте XMLHttpRequest. Этот код гарантирует, что наше приложение будет работать как в Internet Explorer 5 и 6, так и в современных браузерах.
  • Функция “xmlhttp.onreadystatechange=function…” проверяет, завершено ли AJAX-взаимодействие и равен ли статус 200, после чего обновляет элемент span с именем txtName полученными результатами.

Шаг 4) Тестирование нашего приложения PHP Ajax

Предположим, вы сохранили файл index.php в папке phptuts/ajax. Перейдите по указанному пути. URL http://localhost/phptuts/ajax/index.php

Тестирование нашего приложения PHP Ajax

Введите букву С в текстовое поле. Вы получите следующие результаты.

Тестирование нашего приложения 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 и помещает ответ в тег span с именем txtName. Она также использует encodeURIComponent для безопасного экранирования ввода, а ее цепочку промисов легко расширить обработкой ошибок с помощью блока catch.

Часто задаваемые вопросы (FAQ)

Синхронный запрос блокирует браузер до тех пор, пока сервер не ответит, «замораживая» страницу. Асинхронный запрос выполняется в фоновом режиме, поэтому страница остается отзывчивой и обновляется по мере поступления данных. Ajax использует асинхронную модель.

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

CORS (Cross-Origin Resource Sharing) блокирует запросы браузера к другому домену, если этот сервер не отправляет правильный заголовок Access-Control-Allow-Origin. Добавьте этот заголовок на стороне PHP или вызовите метод с тем же источником. URL Исправить это.

Да. Вставьте код XMLHttpRequest, и ИИ сможет переписать его, используя API fetch на основе промисов или axios, добавить обработку ошибок и сохранить то же поведение. Проверьте результат, поскольку обработка ответов немного отличается.

Да. Предоставьте код запроса, а также консоль браузера или сообщение об ошибке сети, и ИИ сможет обнаружить ошибку. URLЕсли возникла блокировка CORS, отсутствует параметр или произошла ошибка сервера, предложите решение для проверки.

Подведем итог этой публикации следующим образом: