1

私が返すオブジェクト内で JSON を送り返す方法を見つけるのに苦労しています (' running Coldfusion8' ) 現在、Ajaxリクエストに応じてこれを送り返しています:

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

DATAコンテンツのみの Ajax リクエストもあり、次のようにパーツを送り返しています。

return "HTML someData"

このようにして、圧縮されバイナリ gzip された HTML を送信できます。これはうまく機能し、「ペイロード」を 60k のデータから 2 ~ 3k に減らします。

私のページはオフラインで利用できるようにする必要があるため、クライアントですべてのマークアップ拡張を行い、データベースから JSON データのみを送信するようにしました (そうあるべきだと思います)。ただし、私の JSON 文字列は、送信していた最初の HTML よりもはるかに大きいです (たとえば、10k JSON を作成する必要がある要素にいじる必要があります。2 ~ 3k のすぐに使用できるスニペットに対して)。そのため、余分な帯域幅とクライアント側の処理で自分を罰しています。

回避策として、JSON 文字列を gzip することを試みました (動作します)。これを 2 番目の例のように送り返すことができるかどうか (動作しません...):

return "JSON someData"    

text/JSONの JSON だけでなくリターン ヘッダーでも指定すると、エラーajax-returnformatのみが表示されます。ColdfusionUnable to serialize binary data to JSON

質問
JSON-gzip で返送することは可能ですか? その場合、AJAX 呼び出し ( returnformat?) とサーバー側で何を指定して、毎回失敗しないようにする必要がありますか。

ありがとう!

(注: サーバーで JSON GZIP エンコーディングを設定できるかどうかは尋ねません!)

4

1 に答える 1

0

Ok。以下を使用して、「returntype を打ち負かす」ことができます。

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

私が理解<cfcontent>しているように、クライアントに直接戻るため、何も返しません。他の誰かにとっても役立つかもしれません。

于 2012-12-11T23:57:25.130 に答える