Главная страница  /  Занятия  /  #17  /  Разработать поисковый механизи с использованием технологии AJAX

Разработать поисковый механизм с использованием технологии AJAX

Задание:

Создайте html-документ, содержащий два блока. Блок ввода содержит поле ввода (для ввода телефона или фамилии) и кнопку поиска «Найти», в блоке ответа выводится найденная информация. Нажатие на кнопку «Найти» запускает JS-скрипт (scripts.js), который формирует и отправляет асинхронный AJAX-запрос серверному скрипту (scripts.php) методом GET. Серверный скрипт (scripts.php) запрашивает необходимую информацию из базы данных, формирует ответ в текстовом формате и отправляет его клиентскому скрипту (scripts.js). Клиентский скрипт (scripts.js) получает ответа сервера и выводит его в блок ответа.

Необходимая информация о базе данных:

Сервер: localhost
База данных: ******_education
Пользователь: ******_education
Пароль: ******
Таблица: education_users
Поля: user_name, user_phone

Посмотреть решение

html-документ (index.html):

   <!DOCTYPE html>
   
   <html lang="ru">
   
    <head>
     <meta charset="utf-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>Поисковый механизм с использованием технологии AJAX</title>
     <link rel="stylesheet" href="styles.css">
     <script src="scripts.js"></script>
    </head>
   
    <body>
     <div id="answerDiv">
      &nbsp;
     </div>
     <div id="formDiv">
      <label for="phoneOrName">Ведите телефон или фамилию: </label><br><input id="phoneOrName" name="phoneOrName" type="text"><br>
      <button id="findButton">Найти</button>
     </div>
    </body>
   
   </html>

JS-скрипты (scripts.js):

   var xhr = new XMLHttpRequest();
   
   window.onload = function()
   {
    document.getElementById('phoneOrName').focus();
    document.getElementById('findButton').onclick = function() { checkPhoneOrNameFormat(); };
    document.getElementById('phoneOrName').onkeydown = function(e) { if(e.keyCode == 13) { checkPhoneOrNameFormat(); } };
   };
   
   function checkPhoneOrNameFormat()
   {
    if(!document.getElementById('phoneOrName').value)
    {
     alert('Укажите номер телефона или фамилию!');
     document.getElementById('phoneOrName').focus();
     return;
    }
    if(/^[\d\-\+\s]{1,}$/i.test(document.getElementById('phoneOrName').value))
    {
     if(/^\+\d\s\d\d\d\s\d\d\d\-\d\d\-\d\d$/i.test(document.getElementById('phoneOrName').value)) searchPhoneOrName();
     else
     {
      alert('Номер телефона должен иметь формат +7 XXX XXX-XX-XX');
      document.getElementById('phoneOrName').focus();
      return;
     }
    }
    else
    {
     if(/^[а-яА-ЯёЁ\s]{1,}$/i.test(document.getElementById('phoneOrName').value)) searchPhoneOrName();
     else
     {
      alert('Фамилия может содержать только символы русского алфавита');
      document.getElementById('phoneOrName').focus();
      return;
     }
    }
   }
   
   function searchPhoneOrName()
   {
    document.getElementById('answerDiv').innerHTML = 'Поиск данных...';
    xhr.open("GET", "scripts.php?phoneOrName="+encodeURIComponent(document.getElementById('phoneOrName').value), true);
    xhr.responseType = 'text';
    xhr.send();
   }
   
   xhr.onload = function()
   {
    document.getElementById('answerDiv').innerHTML = xhr.response;
   };

PHP-скрипты (scripts.php):

   <?
    header('Content-Type: text/plain; charset=utf-8');
   
    $dbhost = 'localhost';
    $dbname = '******_education';
    $dbuser = '******_education';
    $dbpass = '******';
   
    mysql_connect($dbhost, $dbuser, $dbpass);
    mysql_select_db($dbname);
   
    mysql_query("set names utf-8;");
    mysql_query("set collation_connection=utf8_general_ci;");
   
    $searchResource = mysql_query("select user_name, user_phone from education_users where user_name = '{$_GET['phoneOrName']}' or user_phone = '{$_GET['phoneOrName']}';");
    if(mysql_num_rows($searchResource))
    {
     $currentRecord = mysql_fetch_row($searchResource);
     mysql_close();
     print $currentRecord[0].': '.$currentRecord[1];
     return;
    }
   
    mysql_close();
    if(strpos($_GET['phoneOrName'], '+') === false) print "Ошибка! Пользователь <b>{$_GET['phoneOrName']}</b> не&nbsp;найден.";
    else print "Ошибка! Пользователь с&nbsp;номером телефона <b>{$_GET['phoneOrName']}</b> не&nbsp;найден.";
    return;
   ?>

Результат:

Результат выполнения задания можно посмотреть здесь.