我可以在我返回浏览器的对象中返回一个gzip压缩的JSON字符串吗?

时间:2012-12-11 23:39:20

标签: json coldfusion

我很难找到一种方法在我正在返回的对象中发回JSON('运行Coldfusion8')目前我正在Ajax请求发回这个:

{
 "SUCCESS":true,
 "DATA": "JSON someData",
 "COUNT":10
 }

我还有仅限内容的Ajax请求,我只是像这样发回DATA部分:

return "HTML someData"

这样我就可以发送压缩和二进制gzip压缩HTML,它可以很好地工作,并将“有效载荷”从60k数据减少到2-3k。

由于我的页面必须可以脱机使用,我已经开始在客户端上进行所有标记增强,并且只从我的数据库发送JSON数据(我猜应该是这样)。然而,我的JSON字符串远远大于我发送的初始HTML(比如10k JSON,需要摆弄我需要创建的元素与2-3k的即用型片段)。所以我用额外的带宽和客户端处理来惩罚自己。

为了解决方法,我开始尝试gzip我的JSON字符串(工作)以及我是否可以像我的第二个例子一样发送它(不起作用......):

return "JSON someData"    

如果我在text/JSON中的返回标头和JSON中指定ajax-returnformat,我只会收到Coldfusion错误,告诉我Unable to serialize binary data to JSON

问题
是否可以发回JSON-gzip?如果是这样,我需要在AJAX调用(returnformat?)和服务器端指定什么才能使其工作而不是每次都失败。

谢谢!

(注意:我不会问,如果我可以在服务器上设置JSON GZIP编码!)

1 个答案:

答案 0 :(得分:0)

确定。您可以使用以下方式“击败返回类型”:

<cfif variables.alredayBinary EQ "false">
    <cfcontent reset="no" variable="#CharsetDecode(passBackObject, "UTF-8")#" />
<cfelse>
    <cfcontent reset="no" variable="#passBackObject#" />    
</cfif>
<cfreturn  />

什么都不做,因为我理解<cfcontent>会直接回到客户端。对其他人也许有用。