stringtranslate.com

XMLHttpRequest

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

Конструктор

Для генерации асинхронного запроса к веб-серверу необходимо сначала создать экземпляр ( выделить память ) объекта 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 );

*request.open( "DELETE", null );

Метод setRequestHeader _

POSTЕсли вызывается метод запроса , то требуется дополнительный шаг по отправке типа носителя . [20] Метод позволяет программе отправлять тот или иной HTTP-заголовок на веб-сервер. Его использование . [15] Чтобы включить метод запроса:Content-Type: application/x-www-form-urlencodedsetRequestHeadersetRequestHeader( HeaderField, HeaderValue )POST

*request.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );

Метод отправки _

POSTЕсли вызывается метод запроса , веб-сервер ожидает, что данные формы будут прочитаны из стандартного потока ввода. [21] Чтобы отправить данные формы на веб-сервер, выполните request.send( FormData ), где FormData — текстовая строка. GETЕсли вызывается метод запроса , веб-сервер ожидает только заголовки по умолчанию. [22] Чтобы отправить заголовки по умолчанию, выполните request.send( null ). [д]

Прослушиватель событий onreadystatechange

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 установлен } }           

Примеры Linux

По запросу браузер выполнит функцию JavaScript для передачи веб-серверу запроса на выполнение компьютерной программы . Компьютерная программа может быть интерпретатором PHP , другим интерпретатором или скомпилированным исполняемым файлом . В любом случае функция JavaScript ожидает, что текстовая строка будет передана обратно и сохранена в атрибуте . [22] responseText

Чтобы создать пример функции JavaScript:

функция 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

PHP — это язык сценариев , разработанный специально для взаимодействия с HTML . [24] Поскольку движок PHP является интерпретатором , то есть интерпретирует операторы программы по мере их чтения, существуют программные ограничения [f] и затраты на производительность. [g] Тем не менее, его простота может поместить набор файлов XMLHttpRequest в один и тот же рабочий каталог – возможно /var/www/html, .

PHP-серверный компонент

Серверный компонент PHP XMLHttpRequest — это файл, расположенный на сервере, который не передается в браузер. Вместо этого интерпретатор PHP откроет этот файл и прочитает его инструкции PHP. Протокол XMLHttpRequest требует вывода текстовой строки.

<?php  echo  '<h1>Привет, мир!</h1>' ; ?>

PHP-компонент браузера

Компонент браузера PHP XMLHttpRequest — это файл, расположенный на сервере, который передается в браузер. Браузер откроет этот файл и прочитает его инструкции в формате 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')" > Представлять на рассмотрение </ кнопка > </ тело >

пример компьютерной графики

Процесс Common Gateway Interface (CGI) позволяет браузерам запрашивать веб-сервер для выполнения скомпилированных компьютерных программ . [час]

Серверный компонент CGI

Серверный компонент CGI XMLHttpRequest — это исполняемый файл, расположенный на сервере. Операционная система откроет этот файл и прочитает его машинные инструкции . Протокол XMLHttpRequest требует, чтобы исполняемый файл выводил текстовую строку.

Скомпилированные программы имеют два файла: исходный код и соответствующий исполняемый файл.

#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-компонент браузера

Компонент браузера CGI аналогичен компоненту браузера PHP, за исключением небольшого изменения в файле submit_url. Синтаксис , указывающий веб-серверу на выполнение исполняемого файла, /cgi-bin/сопровождается именем файла. В целях безопасности исполняемый файл должен находиться в chroot-тюрьме . В данном случае тюрьмой является каталог /usr/lib/cgi-bin/. [я]

< 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')" > Представлять на рассмотрение </ кнопка > </ тело >

Смотрите также

Рекомендации

  1. ^ Махемофф, Майкл (2006). Шаблоны проектирования Ajax . О'Рейли. п. 92. ИСБН 978-0-596-10180-0. В Javascript отсутствует переносимый механизм для общего сетевого взаимодействия[.] ... Но благодаря объекту XMLHttpRequest... Код Javascript может выполнять HTTP-вызовы обратно на исходный сервер[.]
  2. ^ Аб Махемофф, Майкл (2006). Шаблоны проектирования Ajax . О'Рейли. п. 92. ИСБН 978-0-596-10180-0.
  3. ^ «Статья оригинального разработчика об истории XMLHTTP» . Alexhopmann.com. 31 января 2007 г. Архивировано из оригинала 30 января 2009 г. Проверено 14 июля 2009 г. Реальность такова, что клиентская архитектура GMail, похоже, повторяет черновой дизайн реализации Outlook Web Access для IE5 и более поздних версий Exchange 2000, который появился еще в 2000 году.
  4. ^ Аб Махемофф, Майкл (2006). Шаблоны проектирования Ajax . О'Рейли. п. 93. ИСБН 978-0-596-10180-0.
  5. ^ «Архив новостей от Mozillazine с указанием даты выпуска Safari 1.2» . Веблоги.mozillazine.org. Архивировано из оригинала 2 июня 2009 г. Проверено 14 июля 2009 г.
  6. ^ «Пресс-релиз с указанием даты выпуска Opera 8.0 на веб-сайте Opera» . Opera.com. 19 апреля 2005 г. Проверено 14 июля 2009 г.
  7. ^ Soft-Info.org. «Подробная информация браузера с указанием даты выпуска iCab 3.0b352». Soft-Info.com . Проверено 14 июля 2009 г.
  8. ^ «Спецификация объекта XMLHttpRequest из рабочего проекта W3C уровня 1, выпущенного 5 апреля 2006 г.» . W3.org . Проверено 14 июля 2009 г.
  9. ^ «Спецификация объекта XMLHttpRequest из рабочего проекта W3C уровня 2, выпущенного 25 февраля 2008 г.» . W3.org . Проверено 14 июля 2009 г.
  10. ^ «Проект редактора XMLHttpRequest от 5 декабря 2011 г.» . w3.org . Проверено 5 декабря 2011 г.
  11. ^ "Стандарт XMLHttpRequest/#спецификация-история" .
  12. ^ Фланаган, Дэвид (1998). JavaScript, Полное руководство . О'Рейли и партнеры. п. 82. ИСБН 1-56592-392-8.
  13. ^ Веллинг, Люк; Томсон, Лаура (2005). Веб-разработка PHP и MySQL . Издательство Самс. п. 162. ИСБН 0-672-32672-8.
  14. ^ «Стандарт XMLHttpRequest; Конструктор» . Проверено 10 апреля 2023 г.
  15. ^ abcd Махемофф, Майкл (2006). Шаблоны проектирования Ajax . О'Рейли. п. 100. ИСБН 978-0-596-10180-0.
  16. ^ Махемофф, Майкл (2006). Шаблоны проектирования Ajax . О'Рейли. п. 96. ИСБН 978-0-596-10180-0.
  17. ^ «HTTP-документация». Июнь 2022 года . Проверено 12 апреля 2023 г.
  18. ^ Махемофф, Майкл (2006). Шаблоны проектирования Ajax . О'Рейли. п. 98. ИСБН 978-0-596-10180-0.
  19. ^ «Стандарт XMLHttpRequest; открытый метод» . Проверено 12 апреля 2023 г.
  20. ^ Махемофф, Майкл (2006). Шаблоны проектирования Ajax . О'Рейли. п. 97. ИСБН 978-0-596-10180-0.
  21. ^ Фланаган, Дэвид (1998). JavaScript, Полное руководство . О'Рейли и партнеры. п. 511. ИСБН 1-56592-392-8.
  22. ^ abc Махемофф, Майкл (2006). Шаблоны проектирования Ajax . О'Рейли. п. 26. ISBN 978-0-596-10180-0.
  23. ^ Аб Махемофф, Майкл (2006). Шаблоны проектирования Ajax . О'Рейли. п. 25. ISBN 978-0-596-10180-0.
  24. ^ Веллинг, Люк; Томсон, Лаура (2005). Веб-разработка PHP и MySQL . Издательство Самс. п. 2. ISBN 0-672-32672-8. PHP — это серверный язык сценариев, разработанный специально для Интернета.
  25. ^ ab «Учебное пособие по Apache» . Проверено 10 апреля 2023 г.

Примечания

  1. ^ Хотя источники могут вызывать XMLHttpRequest как API , технически это класс, экземпляр которого создается в объектной переменной с помощью new оператора .
  2. ^ Современные браузеры выполняют JavaScript, используя JIT-компилятор, называемый движком JavaScript .
  3. ^ Стандарт редактировали Энн ван Кестерен из Opera Software и Дин Джексон из W3C.
  4. ^ Заполнитель nullв настоящее время находится на пенсии, но рекомендуется.
  5. ^ В целях безопасности это назначение должно следовать за выполнением request.open().
  6. ^ Хотя PHP является богатым языком и хорошо взаимодействует с некоторыми базами данных , он поддерживает только подмножество типов контейнеров и не имеет декларативных языковых конструкций.
  7. ^ Интерпретатор выполняет каждый оператор программирования; однако в скомпилированной программе каждая машинная инструкция готова для ЦП .
  8. ^ Веб-сервер также можно настроить для выполнения интерпретируемых программ. [25]
  9. ^ Веб-сервер можно настроить на добавление других каталогов с исполняемыми файлами. [25]

Внешние ссылки