从remoteFunction调用时,不会启动Grails文件下载

时间:2012-11-03 02:04:36

标签: grails

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

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

有几种解决方法:

  • 像以前一样使用普通g:链接并绑定'closeMe();'功能到'click'事件。问题是您无法控制错误或成功响应。
  • 使用iframe:您可以创建临时不可见的iframe,并将其位置设置为要下载的文件的URL。它还有不控制成功/错误响应的背后。

代码可能与this answer中的代码相同:

<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>