Документация
ОС Аврора 5.1.5
HTTP-запрос средствами JS и QML
В QML-коде приложения для ОС Аврора можно написать клиентский http-запрос к удалённому серверу.
Для асинхронного получения данных по сети следует использовать компонент XMLHttpRequest
в версии Qt 5.6.
Дерево DOM xml-ответа, поддерживаемое QML, представляет собой сокращённое подмножество основного API DOM уровня 3, поддерживаемого в веб-браузере.
Для того чтобы отправить запрос и получить ответ, нужно выполнить следующие действия:
- Средствами JavaScript создать новый
XMLHttpRequest
. - Опционально можно задать свойству
responseType
тип ожидаемого ответа, например,json
. - Присвоить функции
onreadystatechange
функцию-обработчик ответа от сервера. Доступ к строке с ответом происходит через свойствоresponseText
у объектаXMLHttpRequest
. Преобразовать строку с ответом можно с помощью JavaScript-функций, например, в формат json с помощью функцииJSON.parse
. - Создать запрос с помощью функции
open
. Ей достаточно передать два аргумента: тип запроса (GET
,POST
и т. д.) и URL-адрес. - Опционально можно задать заголовки запроса через функцию
setRequestHeader
. - Отправить запрос с помощью функции
send
. В качестве аргумента можно ей передать тело запроса.
Пример GET-запроса к открытому API jsonplaceholder.typicode.com
:
function requestPhotos() {
var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
var json = JSON.parse(xhr.responseText);
console.log(json);
}
}
xhr.open("GET", "https://jsonplaceholder.typicode.com/photos");
xhr.send();
}
Пример POST-запроса к открытому API reqres.in
:
function requestUser() {
var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
var json = JSON.parse(xhr.responseText);
console.log(json);
}
}
xhr.open("POST", "https://reqres.in/api/users");
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
var body = 'name=' + encodeURIComponent("morpheus") +
'&job=' + encodeURIComponent("leader");
xhr.send(body);
}