Заметка, описывающая принцип работы AJAX, основанная на олдскульном переводе статьи «Сверхдинамичные вэбинтерфейсы».
В той самой статье давался пример работы технологии AJAX (но он в представленном виде не работал) на примере проверки занятости логина.
Так что исправим пример и добавим функциональность работы с БД (MySQL).
Краткое содержание предыдущей серии версии статьи:
Цель: с помощью AJAX-запросов проверять занятость логина.
Решение: на клиенте используем объект XMLHttpRequest и пачку JavaScript-функций.
Для начала исходный пример использования AJAX (с комментариями на русском ).
При таком запуске возникает ошибка:
В Internet Explorer: 'response' — есть null или не является объектом
В FireFox-s FireBug: response.getElementsByTagName(«method»)[0] is undefined
Причина которой становится понятной при заглядывании на вкладку Net аддона FireFox — FireBug:
Ошибка синтаксического анализа XML: объявление XML или текста не в начале сущности Адрес: moz-nullprincipal:{bca5a75b-786f-4e12-86bf-f684185dc71c} Строка 2, символ 1: <?xml version="1.0" encoding="UTF-8" ^ |
Вносим исправление в серверный скрипт, а именно, перенесем строку объявления XML-документа под header.
Доработка примера для работы AJAX с БД MySQL:
Доработка необходима только серверному скрипту checkUserName.php, если точнее только функции nameInUse():
<?php header('Content-Type: text/xml'); echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; function nameInUse($q) { //соединение с базой данных $conn = mysql_connect('localhost','root','password'); //выбор базы данных MySQL $db = mysql_select_db('wwwdb', $conn); //оператор SQL $sql = "SELECT COUNT(*) FROM `USERS` WHERE `USERNAME` = '$q'"; $result = mysql_query($sql,$conn); //результат запроса $row = mysql_fetch_array($result); switch($row[0]) { case '1' : return '1'; break; default: return '0'; } mysql_close($conn); } ?> <response> <method>checkName</method> <result><?php echo nameInUse($_GET['q']) ?></result> </response> |
У меня в общем-то тоже могут быть небольшие ошибки (как выдастся время и настроение все проверю), а так добро пожаловать в комменты с вопросами.
Вариант на эту же тему от Константина Крылова: http://krylov.org.ua/?p=763.
Привет, спасибо большое, но есть один вопрос.
Когда ввожу логин, существующий в БД, выводится сообщение, что он занят, начинаю править, но сообщение не исчезает, пока не уберу фокус с поля. Это может ввести пользователя в замешательство. Как можно это исправить?