XMLHttpRequest 2, Урок за HTML5
XMLHttpRequest2, или по-точно XMLHttpRequest Level 2, е същият XMLHttp-Request обект, отговорен за функционалността на AJAX, оборудван с нови функции.
Всички те всъщност са корекции на недостатъците на предишната реализация на компонента, който вече има големи предимства за мрежата, но, уви, не е идеален.
Вторият проблем е асинхронното прехвърляне на двоични данни (например картини). Тук всичко е по-просто - такива неща изобщо не бяха предвидени. Те се измъкнаха от ситуацията с още по-грозни методи, като срамно скриха рамка с форма за качване на страницата или организираха получаването на файл под формата на двоичен низ.
Друг проблем, може би по-малко очевиден, беше липсата на механизми за проверка на състоянието на зареждане на съдържанието, механизъм за индикация.
И сега не са необходими хакове за извършване на операции като междудомейн заявки, процес на изтегляне на файлове, изтегляне и изпращане на двоични данни.
На първо място, XMLHttpRequest Level 2 работи в рамките на нов модел на взаимодействие - протоколът за кръстосано споделяне на ресурси (CORS), който позволява отправяне на заявки от един домейн към друг. На практика нищо не се променя в схемата за взаимодействие, просто браузърът, в случай на достъп до друг, вместо да хвърли изключение („произходна грешка“), добавя едно заглавие към заявките:
Които могат да бъдат издадени както към един сайт, така и към целия домейн. Този параметър е еквивалентен на обекта на събитието. произход в уеб съобщения.
Ето как xmlhttp заявка прозрачно се появява от един домейн към друг:
varxhr = нов XMLHttpRequest();
xhr. onload = функция (e)
Променливи данни = JSON. анализира (този.отговор);
Дори не е интересно - абсолютно нищо не се е променило от страна на потребителя!
За работас данни във форма, различна от низове, се появиха свойствата responseType и response, което ви позволява изрично да укажете на браузъра формата на данните, очаквани в резултат на отговора. След като зададете подходящата стойност на свойството responseType на XMLHttpRequest. отговорът ще съдържа стойности в един от следните формати: DOMString, ArrayBuffer, Blob, Document.
Ето как изглежда асинхронното изпращане на изображение с новия XMLHttpRequest:
varxhr = нов XMLHttpRequest(); xhr. open('GET', 'image.jpeg', true); xhr. responseType = 'frraybuffer'; xhr. onload = функция(e)< if(this.status == 200)
varbuilder = нов BlobBuilder();
Bilder. добави (този.отговор):
var blob = строител. getBlob('image.jpg');
По принцип типът ArrayBuffer трябва да се обсъди отделно.
И ето как можете да направите същото, като използвате типа Blob (ако не е необходимо да работим с отделни байтове):
varxhr = нов XMLHttpRequest(); xhr. open('GET', '/path/to/image.png', true); xhr. responseType = 'петно'; xhr. onload = функция(e) < ако (това състояние == 200) < var blob = това. отговор;
varimg = документ. createElement('img'); img. src=прозорец. URL адрес. createObjectURL(blob);
Към сървъра вече могат да се изпращат данни в различни формати. Ето примери за едни и същи arrayBuffer и Blob:
Var uInt8Array = нов Uint8Array([1, 2, 3]);
xhr. изпрати (uInt8Array.buffer);
var blob = нов BlobBuilder();
Петно. append('Аз съм просто пълно петно...'); петно. getBlob('текст/обикновен');
На практика тези функции означават, че вече е достъпно за нас, например изпращане на файл на части, както и зареждане и запазване на файл във файловата система HTML5.
Друго полезно свойство на актуализирания елемент е възможността за работа с данни,идващи от формуляра като един обект - FormData (), инкрустиращ всички елементи на формуляра (да, да и ). Изпращането на данни в този случай изглежда напълно стандартно:
FormData = нови FormData(формуляр);
Тук формулярът е обект на HTML формуляр. И можете да го направите така:
varformData = new FormData(); formData. append('потребител', 'ваня'); formData. append('роля', 'администратор'); formData. добави ('id', 17);
Трябва да се отбележи, че разработчиците изглеждаха много впечатлени от възможностите и подходите на библиотеката jquery, но това лошо ли е?