Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
⊗jsPmDtFDR 18 of 61 menu
Бесплатный курс по работе с AJAX в PHP. Начало 6 ноября. Жми для записи!

Разные запросы к одному файлу в AJAX в PHP

Давайте теперь сделаем так, чтобы мы не вручную делали ссылки, а их количество запрашивалось с сервера отдельным AJAX запросом.

To есть к нашему файлу ajax.php можно будет слать два типа запросов. Первый тип будет запрашивать длину массива, а второй тип будет запрашивать элемент массива по его номеру.

Пусть тип запроса будет регулироваться GET параметром type. Если мы хотим получить длину массива, пусть этот параметр имеет значение 'leng', а если элемент - то значение 'elem'.

Напишем соответствующий PHP код:

<?php $arr = ['a', 'b', 'c']; $type = $_GET['type']; switch ($type) { case 'leng': echo count($arr); break; case 'elem': $num = $_GET['num']; echo $arr[$num - 1]; break; } ?>

Перейдем теперь к клиентской части. В файле index.php пусть будет блок для результата и блок для меню:

<div id="result"></div> <div id="menu"></div>

Получим ссылки на них в переменные:

let result = document.querySelector('#result'); let menu = document.querySelector('#menu');

Сразу по заходу на страницу выполним AJAX запрос на получения количества элементов массива:

let response = await fetch('/ajax.php?type=leng'); let leng = await response.text();

Создадим нужное количество ссылок:

for (let i = 1; i <= leng; i++) { let link = document.createElement('a'); link.textContent = i; menu.append(link); }

Доработаем код так, чтобы созданные ссылки складывались в массив:

let links = []; for (let i = 1; i <= leng; i++) { let link = document.createElement('a'); link.textContent = i; menu.append(link); links.push(link); }

Переберем созданные ссылки и к каждой ссылки привяжем обработчик события:

for (let link of links) { link.addEventListener('click', async function() { let num = link.textContent; let response = await fetch('/ajax.php?num=' + num); let text = await response.text(); result.textContent = text; }); }

Соберем весь код вместе, обернув в вызов функции на месте:

(async function() { let result = document.querySelector('#result'); let menu = document.querySelector('#menu'); let response = await fetch('/ajax.php?type=leng'); let leng = await response.text(); let links = []; for (let i = 1; i <= leng; i++) { let link = document.createElement('a'); link.textContent = i; menu.append(link); links.push(link); } for (let link of links) { link.addEventListener('click', async function() { let num = link.textContent; let response = await fetch('/ajax.php?num=' + num); let text = await response.text(); result.textContent = text; }); } })();

Объясните, почему здесь нужно оборачивать код в вызов функции на месте.

В приведенном уроке два цикла. Переделайте этот код так, чтобы был один цикл, в котором будут создаваться ссылки и сразу на каждую созданную ссылку будут навешиваться обработчики клика.

Пусть у вас есть следующий массив с кусочками HTML кода:

<?php $arr = [ '<div>text1</div>', '<div>text2</div>', '<div>text3</div>', '<div>text4</div>', '<div>text5</div>', ]; ?>

Сделайте ссылки, которые через AJAX будут получать заданный элемент этого массива и выводить его в нужном блоке.