Документация
ОС Аврора 5.0.0
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);
}