Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.08.2022, 11:57
Аспирант
Отправить личное сообщение для Andy_kun Посмотреть профиль Найти все сообщения от Andy_kun
 
Регистрация: 05.08.2022
Сообщений: 64

XMLHttpRequest и responseType
Подскажите пожалуйста, почему делая XMLHttpRequest - запрашивая картинку - responseType - приходит "undefined" - что означет по умолчанию DOMString.

Почему не "arraybuffer" ? Я же картинку запрашиваю.


function my_func()
{
    let my_response_type = this.responseType;
    console.log(my_response_type); 
}



let URL = "https://javascript.ru/forum/images/ca_serenity/misc/logo.gif";

let my_req = new XMLHttpRequest();
my_req.open("GET", URL);

my_req.onload = my_func;

my_req.send();
Ответить с цитированием
  #2 (permalink)  
Старый 26.08.2022, 12:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,597

responseType устанавливаешь ты сам перед запросом, указывая что хочешь получить. XMLHttpRequest за тебя в угадайку играть не будет.
__________________
29375, 35
Ответить с цитированием
  #3 (permalink)  
Старый 26.08.2022, 12:53
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,267

Andy_kun, пример из статьи
https://habr.com/ru/post/120917/
BlobBuilder = window.MozBlobBuilder || window.WebKitBlobBuilder || window.BlobBuilder;

var xhr = new XMLHttpRequest();
xhr.open('GET', '/path/to/image.png', true);
xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
  if (this.status == 200) {
    var bb = new BlobBuilder();
    bb.append(this.response); // Внимание: НЕ xhr.responseText

    var blob = bb.getBlob('image/png');
    /*...*/
  }
};

xhr.send();
Ответить с цитированием
  #4 (permalink)  
Старый 26.08.2022, 13:20
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,597

ksa, это древняя статья, BlobBuilder уже не существует.)
Зато можно ставить responseType сразу 'blob'.
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 26.08.2022, 14:15
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,267

Буду знать...
Ответить с цитированием
  #6 (permalink)  
Старый 26.08.2022, 15:46
Аспирант
Отправить личное сообщение для Andy_kun Посмотреть профиль Найти все сообщения от Andy_kun
 
Регистрация: 05.08.2022
Сообщений: 64

Сообщение от Aetae Посмотреть сообщение
ksa, это древняя статья, BlobBuilder уже не существует.)
Зато можно ставить responseType сразу 'blob'.
То есть от responseType - зависит ответ с Сервера ? Разве сервер на просто GET запрос не должен отдавать одни и те же данные ?
Ответить с цитированием
  #7 (permalink)  
Старый 26.08.2022, 15:49
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,597

Andy_kun, ответ с сервера приходит по HTTP. HTTP это текстовый протокол. Не важно, что там в ответе - это в любом случае строка. От responseType зависит как клиент оную обработает.
__________________
29375, 35
Ответить с цитированием
  #8 (permalink)  
Старый 26.08.2022, 20:08
Аспирант
Отправить личное сообщение для Andy_kun Посмотреть профиль Найти все сообщения от Andy_kun
 
Регистрация: 05.08.2022
Сообщений: 64

Сообщение от Aetae Посмотреть сообщение
Andy_kun, ответ с сервера приходит по HTTP. HTTP это текстовый протокол. Не важно, что там в ответе - это в любом случае строка. От responseType зависит как клиент оную обработает.
Подскажите пожалуйста еще немного.

Вот я читаю: https://developer.mozilla.org/ru/doc...quest/response
Сообщение от ;547620
Свойство XMLHttpRequest response возвращает содержимое тела ответа в виде ArrayBuffer, Blob, Document, JavaScript Object или DOMString в зависимости от значения свойства responseType
И получается, что когда я получаю данные .response к примеру с пустым resonseType, то что это значит ? Какой тип я получу в итоге ??
ArrayBuffer, Blob, Document, JavaScript Object или DOMString ??
Я совсем запутался. Почему обработка клиентов ответа - должна завесить от того, какой тип от отправит, а не по факту ? То есть получил response и хочешь его обработать так, как нужно в не зависимости от посланного responseType.

function my_func()
{
    let my_response = this.response;
    console.log(my_response );
}

Последний раз редактировалось Andy_kun, 26.08.2022 в 20:39.
Ответить с цитированием
  #9 (permalink)  
Старый 26.08.2022, 22:09
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,774

Сообщение от Andy_kun
И получается, что когда я получаю данные .response к примеру с пустым resonseType, то что это значит ? Какой тип я получу в итоге ??
Вы не получаете resonseType. Вы должны его установить перед запросом, предполагая какой придет ответ от сервера или что бы изменить его, если это возможно, настраивая XMLHttpRequest на получение и обработку ответа именно этого типа.
Это Вы должны задать resonseType, а не получить его в ответ от сервера.
Ответить с цитированием
  #10 (permalink)  
Старый 26.08.2022, 22:22
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,774

Сообщение от Andy_kun
Почему обработка клиентов ответа - должна завесить от того, какой тип от отправит, а не по факту ? То есть получил response и хочешь его обработать так, как нужно в не зависимости от посланного responseType.
Ответ сервера в любом случае просто какая то последовательность байтов. И только клиент знает (должен знать) что это такое и как ее обработать. Поэтому и устанавливает responseType перед запросом, что бы сказать XMLHttpRequest, что с этой последовательностью делать. Установишь в 'text' - XMLHttpRequest будет считать, что эта последовательность текстовая строка. Установишь в 'blob' он вернет ее как объект Blob.
Сервер сам responseType не посылает. Он только может установить заголовок content-type в ответе.

Последний раз редактировалось voraa, 26.08.2022 в 22:25.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли вызывать асинхронный XMLHttpRequest якобы синхронно? Или Promise потянут? Svorg AJAX и COMET 6 19.11.2018 14:23
XMLHttpRequest передача массива серверу JaneLane AJAX и COMET 5 16.05.2014 12:09
запрос на другой сайт XMLHttpRequest vscorpion Internet Explorer 9 24.12.2013 16:46
xmlHttpRequest подскажите czp AJAX и COMET 4 10.12.2012 23:23
XMLHttpRequest status=0, хотя запрос проходит. arigasa AJAX и COMET 4 15.02.2011 20:14