Ajax (также AJAX / ˈ eɪ dʒ æ k s / ; сокращение от « асинхронный JavaScript и XML » [1] [2] ) — это набор методов веб-разработки , который использует различные веб-технологии на стороне клиента для создания асинхронных веб-приложений . С помощью Ajax веб-приложения могут отправлять и извлекать данные с сервера асинхронно (в фоновом режиме), не мешая отображению и поведению существующей страницы. Разделяя уровень обмена данными от уровня представления, Ajax позволяет веб-страницам и, как следствие, веб-приложениям динамически изменять содержимое без необходимости перезагрузки всей страницы. [3] На практике современные реализации обычно используют JSON вместо XML.
Ajax — это не технология, а скорее концепция программирования. HTML и CSS можно использовать в сочетании для разметки и стилизации информации. Веб-страницу можно изменять с помощью JavaScript для динамического отображения и предоставления пользователю возможности взаимодействовать с новой информацией. Встроенный объект XMLHttpRequest используется для выполнения Ajax на веб-страницах, позволяя веб-сайтам загружать контент на экран без обновления страницы. Ajax — это не новая технология и не новый язык. Напротив, это существующие технологии, используемые по-новому.
В начале-середине 1990-х годов большинство веб-сайтов были основаны на полных HTML-страницах. Каждое действие пользователя требовало загрузки с сервера совершенно новой страницы. Этот процесс был неэффективным, что отражалось на пользовательском опыте: все содержимое страницы исчезало, затем появлялась новая страница. Каждый раз, когда браузер перезагружал страницу из-за частичного изменения, все содержимое приходилось отправлять заново, даже если изменилась только часть информации. Это создавало дополнительную нагрузку на сервер и делало пропускную способность ограничивающим фактором производительности.
В 1996 году тег iframe был представлен Internet Explorer ; как и элемент object , [ необходима цитата ] он может загружать часть веб-страницы асинхронно. В 1998 году команда Microsoft Outlook Web Access разработала концепцию, лежащую в основе объекта скрипта XMLHttpRequest . [4] Он появился как XMLHTTP во второй версии библиотеки MSXML , [4] [5] , которая поставлялась с Internet Explorer 5.0 в марте 1999 года. [6]
Функциональность элемента управления Windows XMLHTTP ActiveX в IE 5 была позже реализована в Mozilla Firefox , Safari , Opera , Google Chrome и других браузерах как объект JavaScript XMLHttpRequest. [7] Microsoft приняла собственную модель XMLHttpRequest в Internet Explorer 7. Версия ActiveX по-прежнему поддерживается в Internet Explorer, но не в Microsoft Edge . Полезность этих фоновых HTTP- запросов и асинхронных веб-технологий оставалась довольно неясной, пока она не начала появляться в крупных онлайн-приложениях, таких как Outlook Web Access (2000) [8] и Oddpost (2002). [9]
Google широко внедрил соответствующий стандартам кроссбраузерный Ajax с Gmail (2004) и Google Maps (2005). [10] В октябре 2004 года публичный бета-релиз Kayak.com стал одним из первых крупномасштабных применений в электронной коммерции того, что их разработчики в то время называли «xml http thing». [11] Это повысило интерес к Ajax среди разработчиков веб-программ.
Термин AJAX был публично использован 18 февраля 2005 года Джесси Джеймсом Гарретом в статье под названием Ajax: новый подход к веб-приложениям , основанной на методах, используемых на страницах Google. [1]
5 апреля 2006 года Консорциум Всемирной паутины (W3C) опубликовал первый проект спецификации для объекта XMLHttpRequest в попытке создать официальный веб-стандарт . [12] Последний проект объекта XMLHttpRequest был опубликован 6 октября 2016 года, [13] и спецификация XMLHttpRequest теперь является живым стандартом . [14]
Термин Ajax стал обозначать широкую группу веб-технологий, которые можно использовать для реализации веб-приложения, взаимодействующего с сервером в фоновом режиме, не влияя на текущее состояние страницы. В статье, в которой был введен термин Ajax, [1] [3] Джесси Джеймс Гарретт объяснил, что включены следующие технологии:
Однако с тех пор произошел ряд изменений в технологиях, используемых в приложении Ajax, и в определении самого термина Ajax. XML больше не требуется для обмена данными, и, следовательно, XSLT больше не требуется для манипулирования данными. JavaScript Object Notation (JSON) часто используется в качестве альтернативного формата для обмена данными, [15] хотя могут использоваться и другие форматы, такие как предварительно отформатированный HTML или простой текст. [16] Различные популярные библиотеки JavaScript, включая JQuery , включают абстракции для помощи в выполнении запросов Ajax.
Пример простого Ajax-запроса с использованием метода GET , написанного на JavaScript .
получить-ajax-data.js:
// Это клиентский скрипт.// Инициализируем HTTP-запрос. let xhr = new XMLHttpRequest (); // определяем запрос xhr.open ( 'GET' , 'send-ajax-data.php' ); // Отслеживаем изменения состояния запроса. xhr.onreadystatechange = function ( ) { const DONE = 4 ; // readyState 4 означает , что запрос выполнен. const OK = 200 ; // статус 200 — успешный возврат. if ( xhr.readyState === DONE ) { if ( xhr.status === OK ) { console.log ( xhr.responseText ) ; // ' Это вывод.' } else { console.log ( ' Ошибка : ' + xhr.status ); // Во время запроса произошла ошибка . } } } ; // Отправляем запрос на send-ajax-data.php xhr . send ( null );
отправить-ajax-data.php:
<?php // Это скрипт на стороне сервера.// Устанавливаем тип содержимого. header ( 'Content-Type: text/plain' );// Отправляем данные обратно. echo "Это вывод." ; ?>
Fetch — это собственный API JavaScript. [17] Согласно документации разработчиков Google, «Fetch упрощает выполнение веб-запросов и обработку ответов по сравнению со старым XMLHttpRequest».
fetch ( 'send-ajax-data.php' ) . then ( data => console.log ( data ) ) ) . catch ( error => console.log ( ' Ошибка : ' + error ));
асинхронная функция doAjax1 () { try { const res = await fetch ( 'send-ajax-data.php ' ); const data = await res . text (); console . log ( data ); } catch ( error ) { console . log ( 'Error:' + error ); } } doAjax1 ();
Fetch использует обещания JavaScript.
Спецификация fetch
отличается от Ajax
следующей существенной особенностью:
fetch()
не будет отклонено при возникновении ошибки HTTP , даже если ответом является HTTP 404 или 500. Вместо этого, как только сервер ответит заголовками, Promise будет разрешен обычным образом (со свойством ok
ответа, установленным на false, если ответ не находится в диапазоне 200–299), и будет отклонено только в случае сбоя сети или если что-то помешало выполнению запроса.fetch()
не будет отправлять файлы cookie из разных источников, если вы не установите опцию инициализации учетных данных . (С апреля 2018 г. спецификация изменила политику учетных данных по умолчанию на same-origin
. Firefox изменился с версии 61.0b13.)Ajax предлагает несколько преимуществ, которые могут значительно повысить производительность веб-приложений и удобство для пользователей. Уменьшая трафик сервера и повышая скорость, Ajax играет важную роль в современной веб-разработке. Одним из ключевых преимуществ Ajax является его способность отображать веб-приложения без необходимости извлечения данных, что приводит к снижению трафика сервера. Эта оптимизация минимизирует время отклика как на стороне сервера, так и на стороне клиента, устраняя необходимость для пользователей терпеть загрузочные экраны. [18]
Кроме того, Ajax облегчает асинхронную обработку, упрощая использование XmlHttpRequest, что позволяет эффективно обрабатывать запросы на асинхронное извлечение данных. Кроме того, динамическая загрузка контента значительно повышает производительность приложения. [19]
Кроме того, Ajax имеет широкую поддержку во всех основных веб-браузерах, включая Microsoft Internet Explorer версии 5 и выше, Mozilla Firefox версии 1.0 и выше, Opera версии 7.6 и выше, а также Apple Safari версии 1.2 и выше. [20]