Асинхронные запросы - жутко звучащая формулировка, особенно для новичка в области программирования, позволяют освободить пользователя от мельтешащих обновлений страницы и реализуют работу с сайтом в пределах одной страницы, блоки которой обновляются в зависимости от действий пользователя. В общем-то на выходе всё прекрасно и уместно, правда осуществление данного механизма на сайте не так проста, как думается. Давайте перейдем к рассмотрению базовых знаний необходимых для создания асинхронных запросов. Может даже кому-то станет потешно, но желательно понимание HTML :), следом нужно ведать javascript, после необходимы знания в php и, (само собой) разумеется же MySQL. С точки зрения программирования, план работы асинхронного запроса будет выглядеть следующим образом: 1. юзер на странице активирует нажатием какой-либо зрительный компонент, что в свою черед влечет к выполнению пункта 2; 2. активирование визуального элемента сайта приводит к вызову javascript функции [ajax_request], в которой и происходит разновременный запрос к веб серверу; 3. сервер, приняв задание, анализирует его, выполняет все необходимые действия и отдает отклик, "Выкрикивая" его с помощи функций echo или print; 4. отзыв сервера приходит в [ajax_request] и происходит обработка ответа от веб сервера; 5. спустя время, после обработки ответа, информация выводятся на экран используя атрибут .innerHTML dom элементов страницы.
Я обязан остеречь Вас от реализации данного механизма для полной навигации по сайту, этот вид навигации повлечет за собой неимение истории в браузере, что дико отрицательно будет воспринято 99% процентами пользователей, соответственно, этот приём и вообще асинхронные запросы вернее использовать в формах проверки данных, при поиске, или же в полях подсказок, а также в некоторых других случаях.
Реализация функции ajax_request: JAVASCRIPT **************************************************************
function
ajax_request
() { // Вызов функции инициализации объекта XMLHttpRequest // REQUEST var request = CreateRequest(); //***************** запрос отправляется вручную. USER_ID=1; message
="hello"; // URL для подключения var url = "agregator.php?task=ADD_MESSAGE&MSG=" +message + "&RECIEVER_ID="+USER_ID+"&random=" + Math.random(); // random (случайное число) - чтобы не было глюков с кешированием request.open("GET", url, true); request.onreadystatechange = updatePage; request.send(null); function updatePage() { if (request.readyState == 4) if (request.status == 200) { // Вызов функции обработки ответа и передача ей ответа tmp=request.responseText;
document.getElementById('MSG').innerHTML=tmp; // помещаем ответ сервера в эелемент MSG delete request; } else { alert("Сервер не ответил"); } } }
function CreateRequest() { request = new XMLHttpRequest(); try { request = new XMLHttpRequest(); } catch (trymicrosoft) { try { request = new ActiveXObject("Msxml2.XMLHTTP"); } catch (othermicrosoft) { try { request = new ActiveXObject("Microsoft.XMLHTTP"); } catch (failed) { request = false; } } } if (!request) { alert("Ошибка инициализации XMLHttpRequest! Возможно\n" + "ваш браузер не поддерживает этот объект."); } return request; } **************************************************************** ***PHP*** $task=$_GET['task'];
switch ($task) {
case "
ADD_MESSAGE
": $ID=$_GET['
RECIEVER_ID
']; $message=$_GET['
MSG
'];
RecordMSG(
$message
); echo "Сообщение записано!"; break;
}
*********
***HTML***
<div id='
MSG
'></div>
В этом элементе появится ответ сервера.
**********
|