2013-03-23 6 views
0

У меня есть gzip-ответ от веб-запроса, который мне нужно развернуть в JavaScript (фактически, в функции успеха вызова AJAX - мой код работает в безгласном браузере и doesn у вас есть встроенная поддержка обработки gzip, предлагаемая полным браузером). Я искал ответ, но я немного в тупике.Как распаковать gzip xhr-ответ в javascript

В идеале я хотел бы иметь код является:

var my_decompressed_string = someGzipDecompressor(xhr.responseText); 

Я нашел, что я думал, что было ответом на JavaScript implementation of Gzip, но это не может быть ответ, который я надеялся. При попытке использовать указанную библиотеку jsxcompressor путем следующего фрагмента кода

var my_decompressed_string = JXG.decompress(xhr.responseText); 

... Я получаю ...

TypeError: 'undefined' is not an object (evaluating '(new JXG.Util.Unzip(JXG.Util.Base64.decodeAsArray(str))).unzip()[0][0]') 

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

JXG.Util.Base64.decodeAsArray(xhr.responseText) 

... но undefined вернулся к внешней части ...

JXG.Util.Unzip(...) 

Таким образом, это может быть тупиком, конечно, но если кто-нибудь знает способ, что мой первоначальный вопрос должен быть возможно, или имеет какие-либо лучше удачи с jsxcompressor.js я ценю это.

Конечно, я могу заставить свой запрос AJAX вернуть ответ «deflate», но размер страницы (для которой я не контролирую) довольно большой, и запрос gzip - попытка ускорить загрузку моей страницы время.

+0

Первое, что нужно сделать, это dump xhr.responseText на консоль и посмотреть, что это такое и что его формат – Radiotrib

+1

Итак, ответ gzipped, но ваш браузер не распаковывает это прозрачно? Почему нет? – robertklep

+0

Вот что мне интересно ... Я думаю, что OP пытается уничтожить то, что браузер уже сделал для него ... но он по-прежнему не разрешает ошибку «undefined». В этом случае в качестве начальной точки может быть рассмотрена вкладка Firebug Net запроса данных/ответа и проверка возвращаемого значения и заголовков. – Radiotrib

ответ

1

jsxcompressor.js требует кодировку Base64 распаковывать, вы должны использовать:

var my_decompressed_string = JXG.decompress(btoa(xhr.responseText)); 

если ваш обезглавленный браузер не поддерживает btoa, то вы должны использовать библиотеку кодирования base64, если ваш узел или iojs есть много пакетов base64 npm.

+0

Большое спасибо. Я думал, что это связано с кодировкой base64, но не могло понять, где и как с этим справиться. У меня почти было это! – timecode

Смежные вопросы