Javascript.RU

XMLHTTPRequest

Update: Более новый материал по этой теме находится по адресу https://learn.javascript.ru/ajax-xmlhttprequest.

Объект XMLHTTPRequest - низкоуровневая основа большинства AJAX-приложений. Знание его методов, свойств и особенностей не только помогает писать приложения на низком уровне с минимумом javascript-кода, но и позволяет понять, что происходит внутри фреймворков, которые, увы, часто несовершенны или тянут много лишнего.

Основные методы для посылки запросов XMLHttpRequest:

  • open(Method, Url, async)
  • send(data)
  • onreadystatechange

Правильная последовательность open/onreadystatechange/send:

req.open("GET", url, true)
req.onreadystatechange = handler
req.send(null)

Методы для манипуляции заголовками:

  • setRequestHeader()
  • getResponseHeader()
  • getAllResponseHeaders()

Обрыв соединения осуществляет метод

  • abort()

Ответ сервера находится в

  • responseText
  • responseXML
  • status
  • statusText

Причем responseXML заполняется только в случае, когда Content-Type с сервера имеет значение text/xml (кроме overrideMimeType-метода, но он есть только в Firefox).

Краткая сводка плюсов и минусов

  • Возможна синхронная передача (хотя и подвешивает браузер)
  • Полный контроль над заголовками
  • Можно отсылать документы из браузера в виде файлов, составляя POST-запрос вручную
  • В явном виде выдает ошибки коммуникации
  • Ограничение безопасности при помощи same origin policy
  • Невозможна отправка файлов, выбранных в форме
  • Утечки памяти при неправильном применении в старых IE

Пример небольшой функции getUrl, которая делает запросы:

function getXmlHttp(){
	try {
		return new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			return new ActiveXObject("Microsoft.XMLHTTP");
		} catch (ee) {
		}
	}
	if (typeof XMLHttpRequest!='undefined') {
		return new XMLHttpRequest();
	}
}

// Получить данные с url и вызывать cb - коллбэк c ответом сервера 
function getUrl(http://javascript.ru/forum/url, cb) { 
	var xmlhttp = getXmlHttp();
	// IE кэширует XMLHttpRequest запросы, так что добавляем случайный параметр к URL
	// (хотя можно обойтись правильными заголовками на сервере)
	xmlhttp.open("GET", url+'?r='+Math.random());
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			cb(
			xmlhttp.status, 
			xmlhttp.getAllResponseHeaders(), 
			xmlhttp.responseText
			);
		}
	}
	xmlhttp.send(null);
}

Более подробно о свойствах и применении XMLHTTPRequest - на http://xmlhttprequest.ru


Автор: Павлик (не зарегистрирован), дата: 27 августа, 2008 - 18:04
#permalink

Замечательная статья!! Автору респект!


Автор: Гость (не зарегистрирован), дата: 2 октября, 2008 - 17:03
#permalink

Кстати, помнится читал о том, что можно посылать запросы и на др. сервера, но не каждый браузер это позволяет... правда это или нет?


Автор: orange, дата: 25 января, 2009 - 01:13
#permalink

если мне не изменяет память то это можно сделать, только если объект создан с использованием ActiveXObject, то есть в 5, 6 версии IE, а объект XMLHTTPRequest (то есть это все остальные браузеры, включая и IE 7>) не позволяет отправлять запросы на другие сервера - политика безопасности.
Если не прав - поправьте


Автор: Злата (не зарегистрирован), дата: 16 декабря, 2008 - 00:48
#permalink

естественно, почему бы и нет


Автор: Вадим (не зарегистрирован), дата: 16 января, 2009 - 16:53
#permalink

краткость сестра толанта, данный случай к коду.


Автор: B@rmaley.e><e (не зарегистрирован), дата: 22 сентября, 2009 - 17:43
#permalink

Контроль над заголовками далеко не полный. Попробуйте кроссбраузерно передать рефер.


Автор: bandolero, дата: 5 февраля, 2010 - 10:47
#permalink

Подсветка синтаксиса делает зеленым все, что следует за двумя слэшами (//). Поэтому в следующей строке все, что находится правее "http:", отображается зеленым цветом:
function getUrl(http://javascript.ru/forum/url, cb) {


Автор: HelpeR, дата: 10 марта, 2010 - 21:20
#permalink

Здравствуйте Илья Кантор. Хотел спросить на данный момент все браузеры (IE7, 8 FF2, 3, Opera 9, 10) сами автоматически удаляют XMLHttpRequest после получения данных с сервера и никакой утечки памяти не происходит?
И еще хотел спросить, не могли бы вы уточнить на счет этого (Можно отсылать документы из браузера в виде файлов, составляя POST-запрос вручную).
Заранее благодарен!


Автор: Илья Кантор, дата: 10 марта, 2010 - 23:48
#permalink

В общем, все почти ок с утечками. XMLHTTPRequest может формировать заголовки аналогичные тем, которые формирует браузер при посылке файла и тем самым пересылать как бы файл на сервер.


Автор: HelpeR, дата: 11 марта, 2010 - 21:20
#permalink

Значит именно таким образом происходит ajax загрузка файлов на сервер? Т.е. путь к файлу считывается с input type="file" и виде заголовка отправляется на сервер?


Автор: nikonian (не зарегистрирован), дата: 15 апреля, 2010 - 15:13
#permalink

Нет, не так. AJAX-загрузка осуществляется через iframe, через XMLHttp передача невозможна.
В статье имелось в виду - чисто теоретически, если вы установите в заголовках, что передаете файл и потом просто вручную вобьете в POST-запрос поток байтов - таки-да, будет принят файл.


Автор: Гость (не зарегистрирован), дата: 10 августа, 2010 - 13:39
#permalink

Привет всем, не подскажите почему в следующем коде не создается экземпляр объекта?

//ссылка на объект XmlHttpRequest
var xmlHttp = createXmlHttpRequestObject();
//создаем экземпляр XmlHttpRequest
function createXmlHttpRequestObject()
{
	//для хранения ссылки на XmlHttpRequest
	var xmlHttp;
	//следующий код работает во всех браузерах
	//кроме IE6 и более ранних версиях
	try //обработка ошибок
	{
		//попытаться создать объект XmlHttpRequest
		xmlHttp = new XmlHttpRequest();
	}
	catch(e)
	{
		//событие происходит если используется IE6 или более раняя версия
		var XmlHttpVersions = new Array("MSXML2.XMLHHTP.6.0",
										"MSXML2.XMLHHTP.5.0",
										"MSXML2.XMLHHTP.4.0",
										"MSXML2.XMLHHTP.3.0",
										"MSXML2.XMLHHTP",
										"Microsoft.XMLHHTP");
		//попоробовать все возможные версии (prog id), пока что то не подойдет =)
        for (var i = 0; i < XmlHttpVersions.length && !xmlHttp; i++)
        {
        	try
        	{
          		xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
        	}
        	catch(e){}
        }
	}
	if (!xmlHttp)
	{
  		alert("Ошибка создания объекта XmlHttpRequest");
	}
	else return xmlHttp;
}

Автор: Гость (не зарегистрирован), дата: 10 августа, 2010 - 15:08
#permalink

Пардон... сам разобрался... Оказывается нужно XMLHttpRequest а не XmlHttpRequest


Автор: Гость (не зарегистрирован), дата: 6 ноября, 2010 - 23:53
#permalink

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


Автор: B@rmaley.e><e, дата: 7 ноября, 2010 - 20:50
#permalink

Для сервера такой запрос идентичен обычному. Если метод запроса - GET, то значения нужно искать там, где находятся переменные GET запросов, если POST, то там, где им самое место.


Автор: Серега Kamillorn (не зарегистрирован), дата: 23 ноября, 2010 - 20:25
#permalink

Я делаю так:

var url = "agregator.php?param1="+значение1+"&param2="+значение2+"&random=" + Math.random(); // random (случайное число) - чтобы не было глюков с кешированием
		

		request.open("GET", url, true);
		request.onreadystatechange = updatePage;
		request.send(null);
		function updatePage()
		{
                         if (request.readyState == 4)
			if (request.status == 200)
			{
				// Вызов функции обработки ответа и передача ей ответа
			tmp=request.responseText; // тут хранится ответ от agregator.php
				
			delete request;
					
			
				
			}
			else
			{
				alert("Сервер не ответил");
			}
                
                 }

Автор: mister_maxim, дата: 19 марта, 2011 - 20:22
#permalink

Серега Kamillorn, а как в прочем и автор, а зачем вы используете Math.random() с GET запросом, на мой взгляд коли не хотите кэширования, то уж сразу посылайте POST запросом, и браузеру не будет морока запросы с Math.random циферки хранить.


Автор: Евгенннн (не зарегистрирован), дата: 18 октября, 2011 - 14:20
#permalink

Я только начинающий web-программист, и мне многое не понятно в этой статье
Например: для чего нужен метод onreadystatechange, тут этого не объяснено;
Как работают методы setRequestHeader() getResponseHeader() getAllResponseHeaders()
Все таки надо понимать что на ваш сайт будут залазить совсем новички, чтобы пополнять свои знания, поэтому нужно более подробно пояснять методы объектов


Автор: Ramzil_Nixon (не зарегистрирован), дата: 20 ноября, 2011 - 21:33
#permalink

Дааа. Тут каждый регистр важен...


Автор: allergencore, дата: 28 февраля, 2012 - 18:52
#permalink

заметил такую бредятину(? может, это и к лучшему): у XMLHttpRequest существует что-то вроде "блек-листа" для заголовков. Делая запрос на пхп-шник:

<?php
//... <- setting up headers :D
print_r($_SERVER);
?>

обнаружил что Accept-Charset и еще некоторые заголовки игнорируются при отправке из жабы...
P.S. Народ будьте аккуратнее при веб-серфе в рунете, быдлокодеры совсем офигели - tsr.boot virus словил вчера даже не понял как... но выкурить проблемы не было, ибо это быдлокодеры...


Автор: Дюк (не зарегистрирован), дата: 29 февраля, 2012 - 18:00
#permalink

Больше примеров, пожалуйста! Что изменится, если сделать запрос методом POST? Как сформировать отправляемые данные, например, из ? Как и куда поступают отправленные данные?


Автор: keithbently (не зарегистрирован), дата: 22 мая, 2012 - 12:58
#permalink

Через XMLHTTPREQUEST можно залить файл на сервер.
Нет ну серьёзно:D скора на хабре постну


Автор: Гость (не зарегистрирован), дата: 21 августа, 2012 - 16:24
#permalink

Не подскажете какой-нибудь способ обойти политику безопасности?


Автор: Гость (не зарегистрирован), дата: 11 октября, 2012 - 21:14
#permalink

Автору +5!Прочитал курс новых и старых статей, обычно для изучения технология надо знать английский язык, а здесь читаю все на русском, кратко, внятно и главное ДОСТУПНО!!!Теперь буду более правильно делать свои скрипты.


Автор: Гость (не зарегистрирован), дата: 13 апреля, 2018 - 06:34
#permalink

"более правильно" = "правильнее"


Автор: Гость (не зарегистрирован), дата: 4 апреля, 2013 - 15:04
#permalink

onreadystatechange это же свойство а не метод? Или я не прав?


Автор: wbrframe, дата: 14 июня, 2013 - 21:18
#permalink

Столкнулся с одной проблемой, буду благодарен за дельный совет.
Использую функцию $.ajax для отправки запросов и в определенной ситуации нужно оборвать соединение через abort(). Это благополучно и делаю, но к сожалению abort() тригерит error(). Этому как раз и пытаюсь отучить.

Пробовал вот так:

$.ajax({
   error: function( jqXHR, textStatus, errorThrown )
   {
       if( jqXHR == 'abort' ) 
       {
           return;
       }
       else
       {
           // show user friendly error message
       }
   }
});

К сожалению эта проверка по какой-то причине не всегда срабатывает.


Автор: pol (не зарегистрирован), дата: 5 сентября, 2013 - 16:31
#permalink

Можно спросить? В getXmlHttp() мы сначала пытаемся поднять ActiveXObject "Msxml2.XMLHTTP", потом "Microsoft.XMLHTTP" и лишь когда не получается - стандартно вызываем XMLHttpRequest(). Это отражает некий табель о рагах?
(я привык видеть XMLHttpRequest на первом месте).


Автор: jsd34v2 (не зарегистрирован), дата: 30 ноября, 2020 - 21:16
#permalink

Approximately a million of websites data files uploading to the Reddit, Reddit perhaps simplifies the downloading function. In the event you prefer to get into a video clip or sound from Reddit, then we suggest you make the most of the Reddit online video Downloader on the web resources. We provide the list of Greatest Downloaders to Reddit, where you can down load videos from numerous formats. We'll suggest you utilize the Online Reddit video clip Downloader to get Android mobile people. That can be as You Don't Will Need to put in some other cellular telephone apps in your own phone to download Reddit movies.
rddown reddit


Автор: jvdf34 (не зарегистрирован), дата: 30 ноября, 2020 - 21:17
#permalink

Автор: dejaol sone (не зарегистрирован), дата: 2 декабря, 2020 - 05:30
#permalink

Call me, if you need a friend
Reaching out to me, so take a chance the impossible quiz


Автор: miklas (не зарегистрирован), дата: 28 июля, 2021 - 06:57
#permalink

Information worth thinking about. I am really grateful to you for posting this blog.
cookie clicker


Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 03:09
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 11:59
#permalink

Автор: lalissa kim (не зарегистрирован), дата: 2 августа, 2022 - 10:31
#permalink

Thank you for providing this information. I am delighted to come on this fantastic article. Waffle game


Автор: allanpetter (не зарегистрирован), дата: 3 октября, 2022 - 16:03
#permalink

Can you tell me some way to bypass the security policy?
plaster drywall repair fort worth tx


Автор: Muhammad Ali (не зарегистрирован), дата: 10 ноября, 2022 - 14:35
#permalink

Incredibly amazing feeling of sentence, I have actually experienced in your article Truly pleasant web content for its users.
Discover Everything
The Knowledge Hub


Автор: Muhammad Ali (не зарегистрирован), дата: 18 ноября, 2022 - 12:53
#permalink

I honestly delighted in while browsing through those excellent specifications in this kind of information.
Akhtar Iqbal
Muhammad Usman
Muhammad Ali
TheInformationCenter
Hibbah Sheikh
All News


Автор: 카지노게임추천 (не зарегистрирован), дата: 14 декабря, 2022 - 06:28
#permalink

I was impressed by your writing. Your writing is impressive. I want to write like you.카지노게임추천 I hope you can read my post and let me know what to modify. My writing is in I would like you to visit my blog.


Автор: emili (не зарегистрирован), дата: 14 декабря, 2022 - 11:49
#permalink

Thanks for sharing, I came upon this fantastic article. You will likely enjoy this site and can play it whenever you like, in idle mining empire my opinion, which is extremely nice


Автор: usps tracking number (не зарегистрирован), дата: 14 декабря, 2022 - 12:25
#permalink

A great book or article has the power to alter the lives of many people. Please keep this information up to date as I appreciate you providing it. I'll be your constant companion.


Автор: Dean Ambrose (не зарегистрирован), дата: 12 января, 2023 - 19:16
#permalink

Due to the growing number of obese people in the United States, it is important to talk to patients about how to control their weight.
50lbs to kg


Автор: Гость (не зарегистрирован), дата: 12 марта, 2023 - 11:32
#permalink

I was very encouraged to find this site. mapquest driving directions The reason being that this is such an informative post. Thanks for sharing!


Автор: Adnan Kang (не зарегистрирован), дата: 3 апреля, 2023 - 14:01
#permalink

Автор: Jhon Saim (не зарегистрирован), дата: 3 апреля, 2023 - 18:07
#permalink

Автор: Johnny Louis (не зарегистрирован), дата: 5 апреля, 2023 - 14:12
#permalink

Автор: Nelson Baker (не зарегистрирован), дата: 6 апреля, 2023 - 14:24
#permalink

Автор: Iqbal Hussnain (не зарегистрирован), дата: 6 апреля, 2023 - 15:50
#permalink

Автор: Basil Khan (не зарегистрирован), дата: 7 апреля, 2023 - 14:25
#permalink

I am considerably cheerful to uncover this type of knowledge on your website.
Umrah Packages
All About Modern World
All Write
Writer Talks
All About Modern World


Автор: Ali JOhn (не зарегистрирован), дата: 11 апреля, 2023 - 18:24
#permalink

Автор: aLI jOHN (не зарегистрирован), дата: 11 апреля, 2023 - 19:30
#permalink

Автор: Ali Hafiz (не зарегистрирован), дата: 12 апреля, 2023 - 17:49
#permalink

Автор: John Wick (не зарегистрирован), дата: 3 мая, 2023 - 17:53
#permalink

Автор: John dania (не зарегистрирован), дата: 3 мая, 2023 - 18:05
#permalink

Автор: Usman Ajmad (не зарегистрирован), дата: 4 мая, 2023 - 23:45
#permalink

Автор: Usman Ajmad (не зарегистрирован), дата: 8 мая, 2023 - 15:11
#permalink

I wish to read this sort of material again. I am absolutely more than happy to you for offering this sort of important article.
All inclusive cheap umrah packages
Cheap umrah Packages
Umrah Packages Uk
Travel agency for umrah
Tips and Advice for Umrah
Umrah packages london


Автор: john dinal (не зарегистрирован), дата: 11 мая, 2023 - 21:08
#permalink

This article is good enough to make somebody recognize this incredible thing. I make sure everyone will like this exceptional blog post.
https://johndenial.weebly.com
https://johndenial.wixsite.com/johndanial
https://johndenial.blogspot.com/
https://daniaimprov.blogspot.com/
https://johndenial.wordpress.com/


Автор: kitlen (не зарегистрирован), дата: 11 мая, 2023 - 21:42
#permalink

Автор: kitlen (не зарегистрирован), дата: 11 мая, 2023 - 21:42
#permalink

Автор: Usman Ajmad (не зарегистрирован), дата: 15 мая, 2023 - 14:36
#permalink

I wish to read this sort of material again. I am absolutely more than happy to you for offering this sort of important article.
Rewards and Benefits of Reciting Surah Ikhlas
Drinking Alcohol is the Greatest Sin in Islam
Tips to make your Umrah trip memorable
Importance of Marriage according to Islam
SALAH DURING TRAVELING FOR HAJJ AND UMRAH


Автор: David Wick (не зарегистрирован), дата: 11 июля, 2023 - 15:16
#permalink

Автор: Harry Callum (не зарегистрирован), дата: 25 августа, 2023 - 15:26
#permalink

This is the article especially what I was looking for. Many thanks for discussing this important specifics with incredible preference of words. Best as well as important ideas examined in your post customarily.
https://uktravelblog3.wordpress.com/
https://uktravel3366.blogspot.com/
https://worldtraveling4455.blogspot.com/
https://besttravel8855.blogspot.com/


Автор: Davidcena (не зарегистрирован), дата: 25 августа, 2023 - 15:43
#permalink

I will certainly exchange this article with my friends as it comprises of valuable related information for all.
https://chrisbryon.blogspot.com/
https://oberynmartill.blogspot.com/
https://pedroharington.blogspot.com/
https://jamiegreyjoy.blogspot.com/
https://robertbradly.blogspot.com/


Автор: Davidcena (не зарегистрирован), дата: 28 августа, 2023 - 22:32
#permalink

Anxiously getting ready for such form of articles in potential future. Heart touching and also marvelous information and facts given out in this brief message.
https://chrisbryon.blogspot.com/
https://oberynmartill.blogspot.com/
https://pedroharington.blogspot.com/
https://jamiegreyjoy.blogspot.com/
https://robertbradly.blogspot.com/


Автор: Jhon Snow (не зарегистрирован), дата: 7 сентября, 2023 - 16:47
#permalink

Автор: Zeeshan Nawaz (не зарегистрирован), дата: 8 сентября, 2023 - 16:05
#permalink

I just simply intend to declare that your post has grabbed my heart as a result of the suggestions that it supplies.
https://luxurytravellive.blogspot.com/


Автор: Jhon Snow (не зарегистрирован), дата: 8 сентября, 2023 - 18:51
#permalink

I genuinely encourage this amazing post having relevant information with all the simple facts. Content is truly well composed and all the opinions are arranged in a competent manner.
https://classicaltravel.blogspot.com/
https://comfortablejourney.blogspot.com/
https://destinationtravel22.blogspot.com/
https://beautifultraveling30.blogspot.com/


Автор: Luxury travel live (не зарегистрирован), дата: 7 ноября, 2023 - 19:38
#permalink

This is the content completely what I was looking for. Lots of dues for publishing this essential material with superb preference of phrases.
https://socialsocial.social/user/jackjames36/


Автор: custom packaging boxes (не зарегистрирован), дата: 24 ноября, 2023 - 16:33
#permalink


Автор: Qatarairways (не зарегистрирован), дата: 16 января, 2024 - 21:14
#permalink

Heart touching and also amazing facts shared in this brief post. Nice to examine your post as it has entertaining and also real facts with all the points.
https://techplanet.today/post/do-qatar-airways-serve-alcohol-1
https://techplanet.today/post/is-qatar-airways-cheaper-than-emirates
https://techplanet.today/post/qatar-airways-inflight-entertainment-optio...


Автор: Bestairways (не зарегистрирован), дата: 16 января, 2024 - 21:16
#permalink

Автор: travelthroughqatar (не зарегистрирован), дата: 16 января, 2024 - 21:17
#permalink

Автор: Гость (не зарегистрирован), дата: 23 января, 2024 - 08:43
#permalink

ascd


Автор: mike jordan (не зарегистрирован), дата: 2 февраля, 2024 - 21:16
#permalink

This article serves to make somebody comprehend this incredible thing. I am sure everybody will like this world-class blog post.
https://bestairwaysuk.blogspot.com/
https://flightsairways.blogspot.com


Автор: mike jordan (не зарегистрирован), дата: 2 февраля, 2024 - 21:16
#permalink

This article serves to make somebody comprehend this incredible thing. I am sure everybody will like this world-class blog post.
https://bestairwaysuk.blogspot.com/
https://flightsairways.blogspot.com


Автор: shani (не зарегистрирован), дата: 8 марта, 2024 - 14:21
#permalink

Your article has left a profound impact on me, offering valuable insights for both myself and the wider audience. Given my passion for travel, I consistently arrange Umrah packages for my pilgrimage. Residents of the United Kingdom can easily access economical Umrah packages, especially from London.

Cheap Packages UK


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
1 + 0 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum