Как отправить запрос PUT с полезной нагрузкой, используя POST или GET? - PullRequest
0 голосов
/ 10 января 2020

Мне нужно отправить запрос PUT с полезной нагрузкой в ​​API (Philips Hue Bridge), но у меня есть некоторые ограничения в javascript. Я могу только использовать:

Методы XMLHttpRequest:

open(method, url [, async = true [, username = null [, password = null]]]) Устанавливает метод запроса, URL запроса и синхронный флаг. Поддерживаемый метод запроса: GET, POST

send(data = null) Инициирует запрос. Необязательный аргумент data допускает только строковый тип в кодировке UTF-8. Аргумент игнорируется, если метод запроса GET.

abort() Отменяет любую сетевую активность. Это ограничение исходит из спецификации носимых веб-виджетов Tizen

API Philips Hue Bridge ожидает:

URL: http://hostname/api/username/lights/lightKey/state

Метод: PUT

Пример полезной нагрузки: {"on": true}

Что я пробовал:

var xhr = new XMLHttpRequest(); xhr.open('GET', 'http://hostname/api/username/lights/lightLey/state?on=true'); xhr.send(); Ответ: 400 (Bad request)

var xhr = new XMLHttpRequest(); xhr.open('POST', 'http://hostname/api/username/lights/lightLey/state?on=true'); xhr.send(); Ответ: 400 (Bad request)

Также пробовал GET и POST со следующими окончаниями URL: ../state?{on=true} ../state?{on:true} ../state?{"on"=true} ../state?{"on":true} Ответ: 400 (Bad request)

Опять же, я не могу использовать какие-либо дополнительные библиотеки или команды, кроме методов XMLHttpRequest, упомянутых выше.

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 10 января 2020

ниже приведен пример кода. Вы можете попробовать это в своем коде.

var http = new XMLHttpRequest();
var url = 'your_URL.php';
var params = 'on=true';
http.open('PUT', url, true);

//Send the proper header information along with the request
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');

http.onreadystatechange = function() {//Call a function when the state changes.
    if(http.readyState == 4 && http.status == 200) {
        alert(http.responseText);
    }
}
http.send(params);
0 голосов
/ 10 января 2020

Изменение свойства method на PUT должно помочь.

var xhr = new XMLHttpRequest();
xhr.open('PUT', 'http://hostname/api/username/lights/lightLey/state?on=true');
xhr.send();
...