Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.07.2023, 09:33
Новичок на форуме
Отправить личное сообщение для Daniil96 Посмотреть профиль Найти все сообщения от Daniil96
 
Регистрация: 14.07.2023
Сообщений: 6

Когда отправляются header-ы?
Добрый день, уважаемые разработчики!

У меня вопрос: когда отправляются header-ы при отправке XHR-запроса? В момент вызова .setRequestHeader() или же после вызова .send()?

P.S.: Не нашел эту информацию в описании методов на developer.mozilla.org.

Спасибо вам за ваше время.
Ответить с цитированием
  #2 (permalink)  
Старый 14.07.2023, 09:38
Новичок на форуме
Отправить личное сообщение для Daniil96 Посмотреть профиль Найти все сообщения от Daniil96
 
Регистрация: 14.07.2023
Сообщений: 6

В пользу гипотезы, что header-ы отправляются между .open() и .send() говорит само наличие метода .open(). Ведь этот метод для чего-то нужен. К тому же .open() инициирует переход в readyState = "OPENED".
Ответить с цитированием
  #3 (permalink)  
Старый 14.07.2023, 09:41
Новичок на форуме
Отправить личное сообщение для Daniil96 Посмотреть профиль Найти все сообщения от Daniil96
 
Регистрация: 14.07.2023
Сообщений: 6

На https://javascript.info/xmlhttprequest сказано:
Цитата:
Please note that open call, contrary to its name, does not open the connection. It only configures the request, but the network activity only starts with the call of send.
Т. е. все header-ы отправляются после .send(). Вопрос закрыт, спасибо.
Ответить с цитированием
  #4 (permalink)  
Старый 14.07.2023, 10:21
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 456

Сообщение от Daniil96
Ведь этот метод для чего-то нужен.
Чтобы поменять параметры, которые он устанавливает: method, url, async, user, password.

Потому что в теории можно делать так:
let xhr = new XMLHttpRequest();
xhr.open('GET', url);
xhr.send();
// loadend or abort
xhr.open('POST', url);
xhr.send(body);
// ...
xhr.open('POST', url2);
xhr.send(body);
// ...

Последний раз редактировалось Rise, 14.07.2023 в 10:24.
Ответить с цитированием
  #5 (permalink)  
Старый 14.07.2023, 10:54
Новичок на форуме
Отправить личное сообщение для Daniil96 Посмотреть профиль Найти все сообщения от Daniil96
 
Регистрация: 14.07.2023
Сообщений: 6

Rise, но ведь в том-то и дело, что можно было сразу же отправить method, url и др. параметры для .open(...) сразу же в .send(...). Получается, .open() - это просто атавизм JS))
Ответить с цитированием
  #6 (permalink)  
Старый 14.07.2023, 11:43
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 456

Daniil96,
Если вы хотите сразу отправить одним методом используйте fetch(). А XMLHttpRequest это еще два десятка других методов и событий, например, события прогресса (которых нет в fetch и вряд ли будут):
// В порядке выполнения:

xhr.onloadstart // 1

xhr.upload.onloadstart // 2
xhr.upload.onprogress // 3
xhr.upload.onload // 4
xhr.upload.onerror // 4
xhr.upload.onabort // 4
xhr.upload.ontimeout // 4
xhr.upload.onloadend // 5

// download
xhr.onprogress // 6
xhr.onload // 7
xhr.onerror // 7
xhr.onabort // 7
xhr.ontimeout // 7
xhr.onloadend  // 8

xhr.onreadystatechange // 6-8

Последний раз редактировалось Rise, 14.07.2023 в 11:51.
Ответить с цитированием
  #7 (permalink)  
Старый 14.07.2023, 12:58
Новичок на форуме
Отправить личное сообщение для Daniil96 Посмотреть профиль Найти все сообщения от Daniil96
 
Регистрация: 14.07.2023
Сообщений: 6

Rise, понимаю, спасибо. Да, у XHR свои фишки)
Ответить с цитированием
  #8 (permalink)  
Старый 14.07.2023, 13:06
Новичок на форуме
Отправить личное сообщение для Daniil96 Посмотреть профиль Найти все сообщения от Daniil96
 
Регистрация: 14.07.2023
Сообщений: 6

Rise, и спасибо за такую детальную последовательность исполнения! Этого я не знал.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать так, чтобы когда урок начинался (наступало 8:00), то выводилось «Урок нач shkarol Opera, Safari и др. 4 16.08.2022 20:54
audio, узнать когда возможно проиграть od0201 Общие вопросы Javascript 3 28.08.2021 13:10
Данные не всегда отправляются на сервер Manyasha Серверные языки и технологии 5 17.10.2019 10:52
Как начать функцию, когда клаcсу родителя присваивается "active" Рам Элементы интерфейса 2 10.03.2017 17:30