ajax呼び出しを使用して既存のコントローラーからいくつかの機能を追加できるように、完全なhtml(ナビゲーションと独自のjs/cssを備えた)のWeb構造をインポートする必要があるgrailsアプリを構築しています。
これまでのところ、すべてが期待どおりに機能しており、インポートされた html は /webapp/ImportedHtml に表示され、すべての ajax url/js/css は、それが指している対象 (grails アプリの URL またはインポートされた html ulr) に応じて特別な注意が必要です。
しかし、私の最初の問題は、ダウンロード可能なファイル呼び出しの形で発生します。これが私のコードです:
<form id="uploadForm" action="asyncGetFiles" method="post">
<input id="testbutton" type="submit" value="Submit" />
</form>
Jquery Form Pluginによって提供される JavaScript 呼び出しをトリガーする送信を含む非常に単純なフォーム
$('#testbutton').click(function(){
// Takes in a list of files to be downloaded from .downloads
var downloads_container =new Array();
$('.downloads').each(function(){
downloads_container.push($(this).val());
});
var __onSuccess = function(data) {
// Opens the request in a new window to prevent the current from being modified or redirected
var OpenWindow=window.open('', '_blank');
OpenWindow.document.write(data);
OpenWindow.document.close();
self.name="main";
};
var options = {
success: __onSuccess,
data : {
result:''+downloads_container
}
//, url : '../../dataCart/asyncGetFiles'
};
$('#uploadForm').ajaxForm(options);
}
コントローラーのダウンロード コードは非常にシンプルで、次のようになります。
response.setContentType("application/zip")
response.setHeader("Content-Disposition", "attachment; filename=\"" + "pictureName" + "\"");
response.outputStream << "whatever I dont care";
return;
要約すると、私の現在のコードは次のように編成されています
- /rootApp /webapp /htmlルート /downloads /downloads.html
- サーバーには次のように見えます
- /rootApp /htmlルート /downloads /downloads.html
- ajax URLは次のようになります
- ../ ../ コントローラー/ asyncGetFiles
- ここから発信された ajax への呼び出しはダウンロードをトリガーしませんが、呼び出しは成功し、プレーンな文字列としてレンダリングされます。
ただし、コントローラーのビューフォルダーに同じコードを設定すると
/rootApp/controller/downloads.gsp
- asyncGetFiles を指す ajax 呼び出し
- 呼び出しはダウンロードを正常にトリガーします
問題は、最初のシナリオでダウンロードがトリガーされないのはなぜですか?
これを修正する方法に関する情報をどこで探すべきかわかりません:/