views:

537

answers:

0

Hello,

I am facing a problem, while encoding the response that I send back for an AJAX request, using GZIP. Can anyone give me some pointers on this please?

  1. There is an AJAX request from the JSP,
  2. An action class (Struts) at the server side handles the request,
  3. The response is prepared as a JSON object,
  4. The JSON string is written to the Response object and sent back,
  5. the JSON string is read from the responseText property of the xmlHttp object back at the jsp

This works fine. However, instead of sending the raw JSON data, if I send back encoded JSON data, then there are issues.

Server Side Code to create GZip'ed 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();

At the JSP :
// marker
alert('Length of the received Response Text : ' + xmlHttp.responseText.length); // evaluate the JSON
jsonStr = eval('(' + xmlHttp.responseText + ')');

The alert box, on receiving the response, reports length as 0!

Thanks a ton,
Cheers,
RD!