我的页面上有一个iframe,在iframe中我执行代码:
$.ajax({
url: '/SamplePage/ExportToExcel',
async: false,
data: par,
type: 'POST'
});
响应返回正常,但我没有得到'SAVE ATTACHMENT'对话框,没有任何反应......为了清楚起见,标题很好(内容处理,mime类型等),就像我执行导出一样普通表格提交它的工作原理它似乎与ajax调用有关。它会以某种方式工作吗?
由于
答案 0 :(得分:9)
为了延伸达林的答案,我就是这样做的:
我有一个隐藏的表单,隐藏的输入元素用于动态保存我希望转换/导出的值:
<form id="svg_export_form" method="POST" style="display:none;visibility:hidden">
<input type="hidden" name="svg" />
</form>
然后我有这个jQuery代码用post参数动态填充元素,然后提交表单。
$('#svg_export_form > input[name=svg]').val(svg_code);
$('#svg_export_form').attr('action','api/reports/convert/svg/to/png');
$('#svg_export_form').submit();
并且因为返回的响应(来自api调用)具有Content Disposition标头集,此表单提交操作将不会导航用户离开当前页面(但只返回附件),就像普通表单提交一样,因此仍然保持典型Ajax提交的错觉: - )
答案 1 :(得分:8)
使用AJAX时,您将无法获得“另存为”对话框。如果您想要获得此对话框,只需提供下载文件的正常链接:
<a href="/SamplePage/ExportToExcel">download</a>
或者如果您需要POST请求:
<form action="/SamplePage/ExportToExcel" method="post">
<input type="submit" value="download" />
</form>
当您使用AJAX下载文件时,会在成功回调时检索此文件的内容,但您无法使用它进行检索:您无法将其保存到客户端计算机,也无法获得“另存为”对话框。