Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 22.07.2021, 16:56
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,321

GET-запрос как из формы
Имеем дело с "чужим" АПИ... Владельцы практически не идут на контакт.
Есть у них такое АПИ, на запрос должны вернуть нам данные. Из Постмана запрос проходит только если "форм-дата". И показывает вот такой вариант использования fetch()...

var myHeaders = new Headers();
myHeaders.append("X-Device-Token", "WEB");
myHeaders.append("X-Device-Type", "WEB");
myHeaders.append("X-Auth-Token", "60f82d6deeba912302c7e4936092576beeba91017dbee95060f82d6deeba912302c7e494");

var formdata = new FormData();
formdata.append("date", "2021-07-23");

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  body: formdata,
  redirect: 'follow'
};

fetch("https://client-api.xn--80afpmlo.xn--p1ai/api/v1/delivery/timeInterval", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

Но если реально сделать такой запрос со страницы - получаем ошибку
В гет-запросе не должно быть боди.
TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.


Есть какие варианты выполнить таки запрос и получить данные?
Ответить с цитированием
  #2 (permalink)  
Старый 22.07.2021, 17:10
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,321

В итоге все решилось простым. "дедовским" способом - в УРЛ записали параметры и сделали запрос

var url = new URL(def.api.url + "/api/v1/delivery/timeInterval")
var params = {date: d}
url.search = new URLSearchParams(params).toString();
...
fetch(url)
...
Ответить с цитированием
  #3 (permalink)  
Старый 22.07.2021, 17:11
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,321

Но удивляет то, что Постман предлагает такой "не рабочий" вариант запроса...
Ответить с цитированием
  #4 (permalink)  
Старый 23.07.2021, 11:52
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 640

ну и товарищи тоже не правы, насчет гет запрос с бади )
Ответить с цитированием
  #5 (permalink)  
Старый 23.07.2021, 13:34
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 13,321

Читаю сейчас про Node.js - там так же описывают что ГЕТ запрос присылает данные в квери, а ПОСТ и пр. в боди...
Т.ч. вроде как все верно.
Ответить с цитированием
  #6 (permalink)  
Старый 26.07.2021, 15:35
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 640

1) В общем сервер может принимать GET с BODY если он так устроен. (A payload within a GET request message has no defined semantics; sending a payload body on a GET request might cause some existing implementations to reject the request)
2) https://fetch.spec.whatwg.org/#request-class пункт 34 If either init["body"] exists and is non-null or inputBody is non-null, and request’s method is `GET` or `HEAD`, then throw a TypeError.

- Где обоснование того, что браузер не может посылать GET c body, почему они именно так сделали, я так и не нашел )

хотя тут пишут:

https://groups.google.com/a/chromium.../c/dJxBVhdg0G8

стандарт fetch обновился, так и сделали, кто там за стандартом стоит, и почему такой путь выбрали, нам не стоит знать ) ну или вот у них есть chat https://whatwg.org/chat, можно там какого-нибудь кибердрочера спросить...
Ответить с цитированием
  #7 (permalink)  
Старый 26.07.2021, 16:09
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,605

Сообщение от SuperZen
и почему такой путь выбрали
А в XMLHttpRequest по другому что-ли было?
Сообщение от SuperZen
почему они именно так сделали
Потому что ссылки не могут иметь тело априори.

Последний раз редактировалось Rise, 26.07.2021 в 16:25.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как добавить код яндекс.метрики в обработчик формы? jscooker Events/DOM/Window 1 06.12.2014 10:41
Как правильно обработать ajax запрос ? enot Общие вопросы Javascript 1 19.05.2014 20:16
Как отменить событие onchange при отправке формы? Petja Элементы интерфейса 1 10.04.2014 17:10
SQL запрос. Как делать SELECT с условием SELECT Duda.Ml1986@gmail.com Серверные языки и технологии 16 13.01.2014 14:09
Как оборвать на сервере и клиенте запрос если у клиента пропала сеть. beard AJAX и COMET 3 21.12.2012 14:35