В параграфе PHP раздела "Создание сайта" есть упоминание о том, как обмениваются информацией браузер пользователя и сервер. Однако, такой обмен по типу запрос-ответ возможен не только при загрузке страницы, но и после него, в этом случае обмен происходит в фоновом режиме обычно с использованием языка JavaScript.
Приведу пример. Пускай мы хотим реализовать поиск по "Готовым решениям" (то есть по данному разделу) без перезагрузки страницы. В текстовое поле пользователем вводится строка для поиска и в это же время браузер посылает запрос на сервер с требованием найти все решения, удовлетворяющие ей. Когда браузер получает ответ, он вставляет его в div ниже поля ввода. Вот как это выглядит:
Вводите в поле строку "aj..." и получаете внизу ссылку на эту статью. Данная технология обмена данными без перезагрузки получила название AJAX (Asynchronous JavaScript and XML — "асинхронный JavaScript и XML"). В нашем случае AJAX реализуется при помощи библиотеки JsHttpRequest Дмитрия Котерова. Вы можете скачать ее с сайта разработчика или с нашего сайта. Библиотека хорошо себя зарекомендовала, поэтому я советую ее, также, можно использовать соответствующие конструкции из разных фреймворков, таких как jQuery и других.
Теперь о том, как собственно это реализуется программно. Сначала на странице идет подключение библиотеки и создание функции, которая будет реагировать на ввод символов в текстовое поле, отправлять запросы серверу, получать ответы и обрабатывать их:
Как только пользователь вводит какой-то символ в поле input, на ссылку http://www.scriptscript.ru/solutions/examples/ajax1/ идет запрос методом POST с единственным параметром "search" – строкой поиска. Запрос обрабатывает следующий участок кода:
// в массив $_RESULT помещаются данные, которые станут доступны в функции-обработчике
$_RESULT[result]=implode("<br>",$solutions);// склеиваем в строку
// возвращаем строку поиска, чтобы при вставке сопоставить ее с тем,
// что на момент ответа будет в поле ввода
$_RESULT[search]=$_POST[search];
Чтобы вы могли проверить работу библиотеки самостоятельно приведу еще один пример, менее практичный, но без использования баз данных. При нажатии на кнопку "Отправить запрос" на экран выведется распечатка запроса, который вы отправляете скрипту вместе с заголовками.
И напоследок приведу функцию php, которую удобно использовать для работы с библиотекой. В функцию передается строка (или массив строк), которая является либо адресом файла на сервере, либо php-кодом. Таким образом, вы сможете запускать один и тот же скрипт и как самостоятельный сценарий, и как обработчик ajax-запроса. Это бывает удобно, например, при проверке ошибок формы перед сабмитом – обработка не будет дублироваться на JavaScript-е, а будет компактно размещена в одном файле php. Также, в функцию можно будет передать участок php-кода, это поможет избежать ненужного создания коротких фалов.
Добавление комментария