1

GETajax呼び出しを介してダウンロード用のファイルを動的に要求しようとしています。私は次のクライアントサイドコードを持っています:

$(function() {
    $('#submit').click(function() {
        $.ajax({
            type: "GET",
            url: "/download/" + "filename",
            dataType: "json",
            contentType: "application/json",
            complete: function() {
                console.log('Complete');
            },
            success: function() {
                console.log('Success');
            },
            error: function() {
                console.log('Error');
            }
        });
    });
});

ノードサーバーには次の行もあります(これが正しい方法かどうかはわかりません)

app.get('/download/:filename', function(req, res) {
    console.log(req.params);
    res.write(fs.readFileSync(__dirname + "/../public/javascripts/main.js", 'utf8'));
});

だから私は実際にそのjavascriptファイルを(最終的には動的に)ダウンロードしたいと思います。これを正しく行うにはどうすればよいですか?ヘッダー/コンテンツタイプを指定する必要があるとのことです。

4

2 に答える 2

5

コンテンツタイプと配置を次のように設定して戻る必要があります。

Content-Type: application/octet-stream
Content-Disposition: attachment;filename=\"main.js\"

ただし、このファイルにリダイレクトする必要があると思います。私が間違っていなければ、AJAX呼び出しを介してファイルのダウンロードを強制することはできません。

于 2012-06-22T21:23:07.777 に答える
1

.jsファイルを解釈してダウンロードページに適用するつもりですか?

もしそうなら、あなたはおそらくそれをどのように取得しても、ページにwrite()を使用することになり、これはベストプラクティスではありません。

代わりにrequire.jsをチェックしてください。これは、スクリプトを非同期的かつ動的にロードし、実行時に適用するためのより良い方法です。

手動ソリューションを使用して動的な.jsファイルをダウンロードする際に遭遇する問題の1つは、依存関係です。別のファイルに依存する.jsファイルでは、ブラインドjsの未定義エラーが発生します。

さらに、同期インクルードファイルを非同期インクルードファイルに変換すると、実行時のパフォーマンスが最適化されます。

Require.jsはこれらをうまく解決します。

お役に立てば幸いです。ではごきげんよう!クリント

于 2012-06-22T21:23:12.260 に答える