Полезная информация

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№127-03-2012 15:03:30

homo_nudus
Участник
 
Группа: Extensions
Зарегистрирован: 19-02-2007
Сообщений: 193
UA: Nightly 14.0

XMLHttpRequest: responseType = "document"

Не мог бы кто-нибудь из знатоков ответить здесь или на хабре?

http://habrahabr.ru/qa/17817/

Отредактировано homo_nudus (27-03-2012 15:04:35)

Отсутствует

 

№227-03-2012 19:48:13

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 12.0

Re: XMLHttpRequest: responseType = "document"

На хабре у меня учетки нет, поэтому отвечаю здесь: с чего бы это вдруг XMLHttpRequest вдруг взял на себя функции браузера по части отработки скриптов? А если в том примере будет в onload setTimeout в с тайм-аутом в 10 минут - XMLHttpRequest должен будет подождать эти 10 минут, отработать скрипт, и выдать полученное? Этот объект предназначен только для передачи данных:

The XMLHttpRequest specification defines an API that provides scripted client functionality for transferring data between a client and a server.

загрузка, парсинг, и отработка скриптов - это функция браузера, каковым XMLHttpRequest не является.

Отсутствует

 

№327-03-2012 20:33:36

homo_nudus
Участник
 
Группа: Extensions
Зарегистрирован: 19-02-2007
Сообщений: 193
UA: Nightly 14.0

Re: XMLHttpRequest: responseType = "document"

hydrolizer
Да, пожалуй, это логичное объяснение. Тогда, выходит, сама полумера с responseType = "document" не очень логична.

Отсутствует

 

№428-03-2012 06:25:17

hydrolizer
Участник
 
Группа: Extensions
Зарегистрирован: 22-07-2009
Сообщений: 1945
UA: Firefox 12.0

Re: XMLHttpRequest: responseType = "document"

homo_nudus пишет

Тогда, выходит, сама полумера с responseType = "document" не очень логична.

Вполне логична - она целиком соответствует концепции XMLHttpRequest: передает пользователю именно данные, но уже распарсенные в DOM. Я, конечно, понимаю, что хочется, чтобы нововведения разом решали все проблемы, и удовлетворяли все пожелания, но увы - в данном случае пожелания автора той заметки на хабре выходят за рамки разумногопредназначения объекта.
Мне в этом нововведении не понравилось следующее: c введением поддержки responseType = "document" в 11-й версии FF была выпилена поддержка задания для responseType вообще любых значений в синхронных запросах (парсинг HTML в DOM, напомню, осуществляется только в асинхронном запросе). А этот responseType может быть разным - например, с его помощью было удобно получать бинарные данные из локальных ресурсов, не адресуемых по схеме file:///:

Выделить код

Код:

get defaultFavicon()
{
  var defUri=Services.io.newURI("chrome://mozapps/skin/places/defaultFavicon.png", null, null);
  var mime=Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService).getTypeFromURI(defUri);
  var xhr=Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
  xhr.open("GET", defUri.spec, false);
  xhr.responseType="arraybuffer";
  xhr.send(null);
  return "data:" + mime + ";base64," + this.toBase64(new Uint8Array(xhr.response));
}

В асинхронном запросе такая схема получения работает, но если значение, возвращаемое вышеприведенным кодом (например), нужно получить где-то в начале-середине исполняемого кода, то тут начинается возня с коллбэками, псевдопараллельный код, и проч. - это просто неудобно.

Отсутствует

 

№528-03-2012 07:38:48

homo_nudus
Участник
 
Группа: Extensions
Зарегистрирован: 19-02-2007
Сообщений: 193
UA: Nightly 14.0

Re: XMLHttpRequest: responseType = "document"

hydrolizer
Спасибо, не знал.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]