XMLHttpRequest ( XHR ) — это класс JavaScript [a] , содержащий методы для асинхронной передачи HTTP- запросов из веб-браузера на веб-сервер . [1] Эти методы позволяют браузерному приложению выполнять детальный вызов сервера и сохранять результаты в атрибуте XMLHttpRequest . [2] Класс XMLHttpRequest является компонентом программирования Ajax . До появления Ajax HTML-форму необходимо было полностью отправить на сервер с последующим полным обновлением страницы браузера. [2]responseText
Концепция класса XMLHttpRequest была задумана в 2000 году разработчиками Microsoft Outlook , доступного в операционной системе Windows 2000 . [3] Затем эта концепция была реализована в интерпретаторе браузера Internet Explorer 5 (2001) . [b] Однако в исходном синтаксисе идентификатор не использовался . Вместо этого разработчики использовали идентификаторы и . [4] Начиная с Internet Explorer 7 (2006 г.), все браузеры поддерживают этот идентификатор. [4]XMLHttpRequest
ActiveXObject("Msxml2.XMLHTTP")
ActiveXObject("Microsoft.XMLHTTP")
XMLHttpRequest
В настоящее время этот XMLHttpRequest
идентификатор является стандартом де-факто во всех основных браузерах, включая механизм компоновки Mozilla Gecko (2002 г.), Konqueror (2002 г.), Safari 1.2 (2004 г.), [5] Opera 8.0 (2005 г.), [6] и iCab ( 2005). [7]
С появлением кросс-браузерных библиотек JavaScript, таких как jQuery , разработчики могут косвенно вызывать функциональность XMLHttpRequest.
Консорциум Всемирной паутины (W3C) опубликовал рабочий проект спецификации объекта XMLHttpRequest 5 апреля 2006 г. [8] [c] 25 февраля 2008 г. W3C опубликовал рабочий проект спецификации уровня 2 . [9] На уровне 2 добавлены методы для мониторинга хода событий, разрешения межсайтовых запросов и обработки потоков байтов. В конце 2011 года спецификация уровня 2 была включена в исходную спецификацию. [10]
В конце 2012 года WHATWG взяла на себя разработку и поддерживает живой документ с помощью Web IDL . [11]
Для генерации асинхронного запроса к веб-серверу необходимо сначала создать экземпляр ( выделить память ) объекта XMLHttpRequest . Выделенная память присваивается переменной . Программный оператор в JavaScript для создания экземпляра нового объекта new
: . [12] За оператором new
следует функция-конструктор объекта. Разработчики объектно-ориентированных языков обычно вызывают функцию-конструктор, используя то же имя, что и имя класса . [13] В данном случае имя класса — XMLHttpRequest . Чтобы создать экземпляр нового XMLHttpRequest и назначить его переменной с именем request
:
var request = new XMLHttpRequest();
[14]
Открытый метод подготавливает XMLHttpRequest . [15] Он может принимать до пяти параметров , но требуются только первые два.
var request = new XMLHttpRequest();
request.open( RequestMethod, SubmitURL, AsynchronousBoolean, UserName, Password );
GET
для типичных объемов данных. Среди других доступных методов запроса POST
он будет обрабатывать значительные объемы данных. [16] После получения возвращаемой строки отправьте DELETE
метод запроса, чтобы .open()
освободить память XMLHttpRequest . [17] Если DELETE
отправлено, то параметр SubmitURL может иметь значение null
.request.open( "DELETE", null );
POST
Если вызывается метод запроса , то требуется дополнительный шаг по отправке типа носителя . [20] Метод позволяет программе отправлять тот или иной HTTP-заголовок на веб-сервер. Его использование . [15] Чтобы включить метод запроса:Content-Type: application/x-www-form-urlencoded
setRequestHeader
setRequestHeader( HeaderField, HeaderValue )
POST
request.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
POST
Если вызывается метод запроса , веб-сервер ожидает, что данные формы будут прочитаны из стандартного потока ввода. [21] Чтобы отправить данные формы на веб-сервер, выполните request.send( FormData )
, где FormData — текстовая строка. GET
Если вызывается метод запроса , веб-сервер ожидает только заголовки по умолчанию. [22] Чтобы отправить заголовки по умолчанию, выполните request.send( null )
. [д]
onreadystatechange
— это метод обратного вызова , который периодически выполняется на протяжении всего жизненного цикла Ajax. [23] Для установки метода обратного вызова с именем используетсяReadyStateMethod()
синтаксис . [e] Для удобства синтаксис позволяет определить анонимный метод . [23] Чтобы определить анонимный метод обратного вызова:request.onreadystatechange = ReadyStateMethod
вар запрос = новый XMLHttpRequest (); запрос . onreadystatechange = function () { // код опущен }
Жизненный цикл XMLHttpRequest проходит несколько этапов — от 0 до 4. Этап 0 — до open()
вызова метода, а этап 4 — когда приходит текстовая строка. [22] Для мониторинга жизненного цикла XMLHttpRequest имеет readyState
атрибут . Этапы 1–3 неоднозначны, и их интерпретация различается в разных браузерах. [15] Тем не менее, одна из интерпретаций такова: [15]
Когда readyState
значение достигает 4, текстовая строка доставлена и установлена в responseText
атрибуте.
вар запрос = новый XMLHttpRequest (); запрос . onreadystatechange = function ( ) { if ( request.readyState == 4 ) { // request.responseText установлен } }
По запросу браузер выполнит функцию JavaScript для передачи веб-серверу запроса на выполнение компьютерной программы . Компьютерная программа может быть интерпретатором PHP , другим интерпретатором или скомпилированным исполняемым файлом . В любом случае функция JavaScript ожидает, что текстовая строка будет передана обратно и сохранена в атрибуте . [22] responseText
Чтобы создать пример функции JavaScript:
cd /var/www/html
ajax_submit.js
:функция ajax_submit ( element_id , submit_url ) { вар запрос = новый XMLHttpRequest (); вар Completed_state = 4 ; запрос . onreadystatechange = функция ( ) { if ( request.readyState == Completed_state ) { document . _ getElementById ( element_id ). внутреннийHTML = запрос . Текст ответа ; запрос . открыть ( «УДАЛИТЬ» , ноль ); } } запрос . открыть ( «GET» , submit_url ); запрос . отправить ( ноль ); }
PHP — это язык сценариев , разработанный специально для взаимодействия с HTML . [24] Поскольку движок PHP является интерпретатором , то есть интерпретирует операторы программы по мере их чтения, существуют программные ограничения [f] и затраты на производительность. [g] Тем не менее, его простота может поместить набор файлов XMLHttpRequest в один и тот же рабочий каталог – возможно /var/www/html
, .
Серверный компонент PHP XMLHttpRequest — это файл, расположенный на сервере, который не передается в браузер. Вместо этого интерпретатор PHP откроет этот файл и прочитает его инструкции PHP. Протокол XMLHttpRequest требует вывода текстовой строки.
cd /var/www/html
ajax.phtml
:<?php echo '<h1>Привет, мир!</h1>' ; ?>
Компонент браузера PHP XMLHttpRequest — это файл, расположенный на сервере, который передается в браузер. Браузер откроет этот файл и прочитает его инструкции в формате HTML.
cd /var/www/html
ajax.html
:< html > < head > < title > Hello World </ title > < script type = text/javascript src = ajax_submit.js >/ script > </ head > < body > < div id = ajax_title >/ div > < кнопка onclick = "ajax_submit('ajax_title', 'ajax.phtml')" > Представлять на рассмотрение </ кнопка > </ тело >
http://localhost/ajax.html
Submit
Процесс Common Gateway Interface (CGI) позволяет браузерам запрашивать веб-сервер для выполнения скомпилированных компьютерных программ . [час]
Серверный компонент CGI XMLHttpRequest — это исполняемый файл, расположенный на сервере. Операционная система откроет этот файл и прочитает его машинные инструкции . Протокол XMLHttpRequest требует, чтобы исполняемый файл выводил текстовую строку.
Скомпилированные программы имеют два файла: исходный код и соответствующий исполняемый файл.
cd /usr/lib/cgi-bin
ajax.c
:#include <stdio.h> void main ( void ) { /* CGI требует, чтобы первая строка выводилась: */ printf ( "Content-type: text/html \n " ); /* CGI требует для вывода вторую строку: */ printf ( " \n " ); printf ( "<h1>Привет, мир!</h1> \n " ); }
cc ajax.c -o ajax
или
sudo cc ajax.c -o ajax
Компонент браузера CGI аналогичен компоненту браузера PHP, за исключением небольшого изменения в файле submit_url
. Синтаксис , указывающий веб-серверу на выполнение исполняемого файла, /cgi-bin/
сопровождается именем файла. В целях безопасности исполняемый файл должен находиться в chroot-тюрьме . В данном случае тюрьмой является каталог /usr/lib/cgi-bin/
. [я]
cd /var/www/html
ajax.html
:< html > < head > < title > Hello World </ title > < script type = text/javascript src = ajax_submit.js >/ script > </ head > < body > < div id = ajax_title >/ div > < button onclick = "ajax_submit('ajax_title', '/cgi-bin/ajax')" > Представлять на рассмотрение </ кнопка > </ тело >
http://localhost/ajax.html
Submit
В Javascript отсутствует переносимый механизм для общего сетевого взаимодействия[.] ... Но благодаря объекту XMLHttpRequest... Код Javascript может выполнять HTTP-вызовы обратно на исходный сервер[.]
Реальность такова, что клиентская архитектура GMail, похоже, повторяет черновой дизайн реализации Outlook Web Access для IE5 и более поздних версий Exchange 2000, который появился еще в 2000 году.
PHP — это серверный язык сценариев, разработанный специально для Интернета.
new
оператора .null
в настоящее время находится на пенсии, но рекомендуется.request.open()
.