0

在我的 Grails 应用程序中,用户可以单击g:link将调用我的控制器将某些数据导出到 CSV 文件的按钮。这没有问题。

然后我将该按钮移动到一个 jQuery 对话框中,当单击该按钮时,我使用

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

调用相同的控制器方法并关闭对话框。我已经确认该方法被实际调用,并且对话框关闭。但是,不会提示用户使用 CSV 下载。我假设这与 remoteFunction 有关,但我不太确定。谁能解释为什么会发生这种情况以及潜在的解决方法?

谢谢!

4

1 回答 1

1

使用 AJAX 请求,您无法将内容下载为附件,因此无法触发“另存为”对话框。

有几个解决方法:

  • 像以前一样使用普通的 g:link 并绑定 'closeMe();' 'click' 事件的函数。问题是您无法控制错误或成功响应。
  • 使用 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 回答