Статьи

Как использовать AJAX в PHP и jQuery

Сегодня мы собираемся исследовать концепцию AJAX с PHP. Техника AJAX помогает вам улучшить пользовательский интерфейс вашего приложения и улучшить общее восприятие конечного пользователя.

AJAX расшифровывается как асинхронный JavaScript и XML и позволяет асинхронно получать содержимое с внутреннего сервера без обновления страницы. Таким образом, он позволяет обновлять содержимое веб-страницы без перезагрузки.

Давайте рассмотрим пример, чтобы понять, как вы можете использовать AJAX в повседневной разработке приложений. Скажем, вы хотите создать страницу, которая отображает информацию профиля пользователя, с различными разделами, такими как личная информация, социальная информация, уведомления, сообщения и так далее.

Обычный подход заключается в создании различных веб-страниц для каждого раздела. Так, например, пользователи щелкают ссылку социальной информации, чтобы перезагрузить браузер и отобразить страницу с социальной информацией. Это замедляет навигацию между разделами, поскольку пользователю приходится ждать перезагрузки браузера и повторного отображения страницы каждый раз.

С другой стороны, вы также можете использовать AJAX для создания интерфейса, который загружает всю информацию без обновления страницы. В этом случае вы можете отобразить разные вкладки для всех разделов, и, щелкнув по вкладке, он получает соответствующий контент с внутреннего сервера и обновляет страницу, не обновляя браузер. Это поможет вам улучшить общее восприятие конечного пользователя.

Общий вызов AJAX работает примерно так:

диаграмма вызова AJAX между клиентом и сервером

Давайте быстро пройдемся по обычному потоку AJAX:

  1. Сначала пользователь, как обычно, открывает веб-страницу с синхронным запросом.
  2. Затем пользователь нажимает на элемент DOM — обычно кнопку или ссылку — который инициирует асинхронный запрос к внутреннему серверу. Конечный пользователь не заметит этого, поскольку вызов выполняется асинхронно и не обновляет браузер. Однако вы можете распознать эти AJAX-вызовы с помощью такого инструмента, как Firebug.
  3. В ответ на запрос AJAX сервер может вернуть данные строки XML, JSON или HTML.
  4. Данные ответа анализируются с использованием JavaScript.
  5. Наконец, проанализированные данные обновляются в DOM веб-страницы.

Итак, как вы можете видеть, веб-страница обновляется данными в режиме реального времени с сервера без перезагрузки браузера.

В следующем разделе мы расскажем, как реализовать AJAX с использованием обычного JavaScript.

В этом разделе мы увидим, как AJAX работает в обычном JavaScript. Конечно, есть доступные библиотеки JavaScript, которые облегчают выполнение AJAX-вызовов, но всегда интересно знать, что происходит внутри.

Давайте посмотрим на следующий ванильный код JavaScript, который выполняет вызов AJAX и асинхронно получает ответ от сервера.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<script>
var objXMLHttpRequest = new XMLHttpRequest();
objXMLHttpRequest.onreadystatechange = function() {
  if(objXMLHttpRequest.readyState === 4) {
    if(objXMLHttpRequest.status === 200) {
          alert(objXMLHttpRequest.responseText);
    } else {
          alert(‘Error Code: ‘ + objXMLHttpRequest.status);
          alert(‘Error Message: ‘ + objXMLHttpRequest.statusText);
    }
  }
}
objXMLHttpRequest.open(‘GET’, ‘request_ajax_data.php’);
objXMLHttpRequest.send();
</script>

Давайте пройдемся по приведенному выше коду, чтобы понять, что происходит за кулисами.

  1. Сначала мы инициализируем объект XMLHttpRequest , который отвечает за выполнение вызовов AJAX.
  2. У объекта XMLHttpRequest есть свойство readyState , и значение этого свойства изменяется в течение жизненного цикла запроса. Он может содержать одно из четырех значений: HEADERS_RECEIVED , HEADERS_RECEIVED , LOADING и DONE .
  3. Мы можем настроить функцию слушателя для изменений состояния, используя свойство onreadystatechange . И это то, что мы сделали в приведенном выше примере: мы использовали функцию, которая будет вызываться при каждом изменении свойства состояния.
  4. В этой функции мы проверили, readyState значение readyState 4 , что означает, что запрос завершен, и мы получили ответ от сервера. Затем мы проверили, равен ли код состояния 200 , что означает, что запрос был успешным. Наконец, мы получаем ответ, который хранится в свойстве responseText объекта XMLHttpRequest .
  5. После настройки прослушивателя мы инициируем запрос, вызывая метод open объекта XMLHttpRequest . readyState свойства readyState будет установлено равным 1 после этого вызова.
  6. Наконец, мы вызвали метод send объекта XMLHttpRequest , который фактически отправляет запрос на сервер. readyState свойства readyState будет установлено равным 2 после этого вызова.
  7. Когда сервер отвечает, он в конечном итоге установит значение readyState в 4, и вы должны увидеть окно предупреждения, отображающее ответ от сервера.

Вот как AJAX работает с ванильным JavaScript. Конечно, это был очень простой пример для демонстрации концепции AJAX, и в реальном приложении все может быть довольно сложно, так как вам нужно справиться со многими различными сценариями успеха и неудач. Таким образом, это хорошая идея, чтобы выбрать библиотеку JavaScript, которая скрывает специфические сложности браузера!

В следующем разделе мы увидим, как использовать библиотеку jQuery для выполнения вызовов AJAX.

В предыдущем разделе мы обсуждали, как можно выполнять вызовы AJAX, используя ванильный JavaScript. В этом разделе мы будем использовать библиотеку jQuery, чтобы продемонстрировать это. Я предполагаю, что вы знаете основы библиотеки jQuery.

Библиотека jQuery предоставляет несколько различных методов для выполнения вызовов AJAX, хотя здесь мы рассмотрим стандартный метод ajax , который используется чаще всего.

Посмотрите на следующий пример.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
<script>
$.ajax(
  ‘request_ajax_data.php’,
  {
      success: function(data) {
        alert(‘AJAX call was successful!’);
        alert(‘Data from the server’ + data);
      },
      error: function() {
        alert(‘There was some error performing the AJAX call!’);
      }
   }
);
</script>

Как вы уже знаете, знак $ используется для ссылки на объект jQuery.

Первый параметр метода ajax — это URL-адрес, который будет вызываться в фоновом режиме для получения содержимого со стороны сервера. Второй параметр имеет формат JSON и позволяет указывать значения для некоторых различных параметров, поддерживаемых методом ajax .

В большинстве случаев вам нужно будет указывать обратные вызовы об успехе и ошибке. Обратный вызов успеха будет вызван после успешного завершения вызова AJAX. Ответ, возвращенный сервером, будет передан обратному вызову успеха. С другой стороны, обратный вызов сбоя будет вызван, если что-то пойдет не так и возникла проблема при выполнении вызова AJAX.

Итак, как вы можете видеть, AJAX-операции легко выполнять с помощью библиотеки jQuery. Фактически, процесс более или менее одинаков, независимо от библиотеки JavaScript, с которой вы решаете выполнять вызовы AJAX.

В следующем разделе мы увидим реальный пример, чтобы понять, как все это работает с PHP.

В этом разделе мы создадим пример, который извлекает содержимое JSON из файла PHP на стороне сервера, используя AJAX.

В демонстрационных целях мы создадим пример, который выполняет вход пользователя с использованием AJAX и jQuery. Для начала давайте создадим файл index.php , как показано в следующем фрагменте, который отображает базовую форму входа в систему.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!doctype html>
<html>
<head>
<script src=»https://code.jquery.com/jquery-3.3.1.js» integrity=»sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=» crossorigin=»anonymous»></script>
</head>
<body>
<form id=»loginform» method=»post»>
    <div>
        Username:
        <input type=»text» name=»username» id=»username» />
        Password:
        <input type=»password» name=»password» id=»password» />
        <input type=»submit» name=»loginBtn» id=»loginBtn» value=»Login» />
    </div>
</form>
<script type=»text/javascript»>
$(document).ready(function() {
    $(‘#loginform’).submit(function(e) {
        e.preventDefault();
        $.ajax({
            type: «POST»,
            url: ‘login.php’,
            data: $(this).serialize(),
            success: function(response)
            {
                var jsonData = JSON.parse(response);
 
                // user is logged in successfully in the back-end
                // let’s redirect
                if (jsonData.success == «1»)
                {
                    location.href = ‘my_profile.php’;
                }
                else
                {
                    alert(‘Invalid Credentials!’);
                }
           }
       });
     });
});
</script>
</body>
</html>

Файл index.php представляет собой довольно стандартную форму HTML, которая содержит поля имени пользователя и пароля. Он также содержит фрагмент jQuery JavaScript, который соответствует схеме, которую мы видели выше.

Мы использовали событие submit элемента формы, которое будет срабатывать, когда пользователь нажимает кнопку отправки. В этом обработчике событий мы инициировали вызов AJAX, который передает данные формы в файл login.php, используя метод POST асинхронно. Получив ответ от сервера, мы анализируем его с помощью метода parse объекта JSON . И наконец, основываясь на успехе или неудаче, мы предпринимаем соответствующие действия.

Давайте также посмотрим, как выглядит login.php .

01
02
03
04
05
06
07
08
09
10
<?php
if (isset($_POST[‘username’]) && $_POST[‘username’] && isset($_POST[‘password’]) && $_POST[‘password’]) {
    // do user authentication as per your requirements
    // …
    // …
    // based on successful authentication
    echo json_encode(array(‘success’ => 1));
} else {
    echo json_encode(array(‘success’ => 0));
}

Файл login.php содержит логику аутентификации пользователей и возвращает ответ JSON, основанный на успешном или неудачном входе в систему.

В этом уроке мы обсудили основы AJAX и как он работает в PHP. В первой половине статьи мы рассмотрели, как AJAX работает в vanilla JS и в библиотеке jQuery. Во второй половине мы создали реальный пример, который продемонстрировал, как вы можете использовать AJAX для извлечения PHP-содержимого на стороне сервера.

Если у вас есть какие-либо сомнения или вопросы, не стесняйтесь выражать свои мысли, используя канал ниже!