2

アクションコントローラーからzipファイル(または代わりにバイト配列)を取得し、javascriptで解凍しようとしています。ダウンロードしたいデータのサイズが非常に大きいため、時間を節約することが目的です。

これは、データを返すアクション コントローラーです。

    public FileContentResult GetKML()
    {
        byte[] strResult = GetZippedDataWithDotNetZip();
        return File(strResult, "application/zip", "test.zip");
    }

そして、JavaScript でそのコントローラー アクションを呼び出します。

$.post('Home/GetKML', {}, function (data) {
    var info = unzip(data);
});

問題は、コントローラーのアクションがundefinedを返すことです。なんで?

4

1 に答える 1

1

この問題は、jqueryのajax関数が応答タイプのxml、html、script、json、jsonp、およびtextのみを処理するという事実が原因である可能性があります(これは検証していませんが、これまでの経験に基づいています)。アクションからバイナリデータを返していますが、処理できません。

これはjavascriptのイディオムであるため、コントローラーアクションが「undefined」を返すことを強く疑っています。おそらく、戻り値のconsole.logを実行しようとしていて、「undefined」が表示されています。この場合、jqueryがアクションの出力を処理できなかった結果を確認しています。FirefoxとFirebugを使用してajaxリクエストからの実際の応答を確認すると、より適切なトラブルシューティング情報が得られます。

それが「なぜ?」に答えます。あなたの質問では、私は信じています。

いくつかの追加オプションが必要な場合、そしてあなたの回答に基づいて、あなたはパフォーマンスに非常に熱心であり、まさにその種類のパフォーマンス強化を透過的に有効にするために利用可能なすでにサポートされているインフラストラクチャを使用することに興味がないので、あなたはそうすると思いますやりたいこと(つまり、gzip圧縮)は、サーバーから戻ってくるバイナリデータを処理し、必要なことをすべて実行する独自のjqueryプラグインをロールすることを歓迎します。自己実装のパフォーマンス強化に対するあなたの願望は、あなたがそれを達成するためにjqueryドキュメントを進んで掘り下げることができるだろうと私に思わせます。または、それが失敗した場合は、zipデータの抽出をサポートするために独自の方法でjquery機能を再実装してみませんか?

もう1つのオプションは、zipファイルをmimeでエンコードされた文字列として返送することです。これにより、もちろん、zipファイルの有用性が無効になります。しかし、繰り返しになりますが、gzip圧縮を有効にすると、結局圧縮されてしまいます。

于 2013-03-06T21:25:08.670 に答える