
26.08.2022, 11:57
|
Аспирант
|
|
Регистрация: 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();
|
|

26.08.2022, 12:02
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,597
|
|
responseType устанавливаешь ты сам перед запросом, указывая что хочешь получить. XMLHttpRequest за тебя в угадайку играть не будет.
__________________
29375, 35
|
|

26.08.2022, 12:53
|
 |
CacheVar
|
|
Регистрация: 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();
|
|

26.08.2022, 13:20
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,597
|
|
ksa, это древняя статья, BlobBuilder уже не существует.)
Зато можно ставить responseType сразу 'blob'.
__________________
29375, 35
|
|

26.08.2022, 14:15
|
 |
CacheVar
|
|
Регистрация: 19.08.2010
Сообщений: 14,267
|
|
Буду знать... 
|
|

26.08.2022, 15:46
|
Аспирант
|
|
Регистрация: 05.08.2022
Сообщений: 64
|
|
Сообщение от Aetae
|
ksa, это древняя статья, BlobBuilder уже не существует.)
Зато можно ставить responseType сразу 'blob'.
|
То есть от responseType - зависит ответ с Сервера ? Разве сервер на просто GET запрос не должен отдавать одни и те же данные ?
|
|

26.08.2022, 15:49
|
 |
Тлен
|
|
Регистрация: 02.01.2010
Сообщений: 6,597
|
|
Andy_kun, ответ с сервера приходит по HTTP. HTTP это текстовый протокол. Не важно, что там в ответе - это в любом случае строка. От responseType зависит как клиент оную обработает.
__________________
29375, 35
|
|

26.08.2022, 20:08
|
Аспирант
|
|
Регистрация: 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.
|
|

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

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