0

私の Grails アプリケーションでは、ユーザーは をクリックしg:linkてコントローラーを呼び出し、特定のデータを CSV ファイルにエクスポートできます。これは問題なく動作します。

次に、そのボタンを jQuery ダイアログ ボックスに移動し、ボタンをクリックすると、

${remoteFunction(action:'export', onSuccess:'closeMe();', id:courseInstance?.id)}

同じコントローラー メソッドを呼び出して、ダイアログ ボックスを閉じます。実際にメソッドが呼び出されることを確認し、ダイアログ ボックスを閉じます。ただし、CSV のダウンロードではユーザーにプロンプ​​トは表示されません。これはremoteFunctionと関係があると思いますが、よくわかりません。なぜこれが起こるのか、そして潜在的な修正を誰かが説明できますか?

ありがとう!

4

1 に答える 1

1

AJAX リクエストでは、コンテンツを添付ファイルとしてダウンロードすることはできないため、[名前を付けて保存] ダイアログをトリガーすることはできません。

これにはいくつかの回避策があります。

  • 前と同じようにプレーンな g:link を使用し、「closeMe();」をバインドします。「クリック」イベントに機能します。問題は、エラーまたは成功の応答を制御できないことです。
  • iframe を使用する: 一時的に非表示の iframe を作成し、その場所をダウンロードするファイルの URL に設定できます。また、成功/エラー応答を制御しないという裏側もあります。

コードはこの回答と同じである可能性があります:

<script type="text/javascript">
function downloadURL(url) {
    var iframe;
    var hiddenIFrameID = 'hiddenDownloader';
    iframe = document.getElementById(hiddenIFrameID);
    if (iframe === null) {
        iframe = document.createElement('iframe');  
        iframe.id = hiddenIFrameID;
        iframe.style.display = 'none';
        document.body.appendChild(iframe);
    }
    iframe.src = url;   
}
</script>

そして、リンク

<a href="javascript:downloadURL(${createLink(action:'export')})">Export</a>
于 2012-11-05T00:00:10.757 に答える