Простой пример принципа работы и применения AJAX — проверка логина

Логотип AJAXЗаметка, описывающая принцип работы AJAX, основанная на олдскульном переводе статьи «Сверхдинамичные вэбинтерфейсы».
В той самой статье давался пример работы технологии AJAX (но он в представленном виде не работал) на примере проверки занятости логина.

Так что исправим пример и добавим функциональность работы с БД (MySQL).
Краткое содержание предыдущей серии версии статьи:
Цель: с помощью AJAX-запросов проверять занятость логина.
Решение: на клиенте используем объект XMLHttpRequest и пачку JavaScript-функций.

Для начала исходный пример использования AJAX (с комментариями на русском :) ).

HTML-файл

PHP-файл

При таком запуске возникает ошибка:
В 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.

Комментариев: 17

  • 25.02.2013 Евгений:

    Привет, спасибо большое, но есть один вопрос.

    Когда ввожу логин, существующий в БД, выводится сообщение, что он занят, начинаю править, но сообщение не исчезает, пока не уберу фокус с поля. Это может ввести пользователя в замешательство. Как можно это исправить?


Добавление комментария:

 css.php