Я столкнулся с проблемой при кодировании ответа, который я отправляю обратно для запроса AJAX, используя GZIP. Кто-нибудь может дать мне несколько советов по этому вопросу, пожалуйста?
- Есть запрос AJAX от JSP,
- Класс действия (Struts) на стороне сервера обрабатывает запрос,
- Ответ подготовлен как объект JSON,
- Строка JSON записывается в объект Response и отправляется обратно,
- строка JSON считывается из свойства responseText объекта xmlHttp обратно в jsp
Это отлично работает. Однако вместо отправки необработанных данных JSON, если я отправляю обратно закодированные данные JSON, возникают проблемы.
Код на стороне сервера для создания GSON-JSON:
// jsonStr = JSONObj.toString();
ByteArrayOutputStream bos = new ByteArrayOutputStream();
GZIPOutputStream gzip = new GZIPOutputStream(bos);
gzip.write(jsonStr.getBytes());
gzip.close();
String newStr = new String(bos.toByteArray());
// set the response header and send Encoded JSON response
response.setHeader("Content-Type", "application/json");
response.setHeader("Content-Encoding", "gzip");
response.setHeader("Vary", "Accept-Encoding");
pw = response.getWriter();
pw.write(newStr);
pw.close();
В JSP:
// marker
alert('Length of the received Response Text : ' + xmlHttp.responseText.length);
// evaluate the JSON
jsonStr = eval('(' + xmlHttp.responseText + ')');
Окно предупреждения при получении ответа сообщает о длине как 0!