我使用jquery ajax将一些数据发布到服务器。服务器会发出一个文件(如果请求成功)。我只是想知道如何在成功回调中启动保存文件对话框给出结果?感谢。
PS:
最简单的解决方案是:
$('#ExportToExcel').click(function () {
$('#form').attr({ action: 'bla' });
$('#form').submit();
return false;
});
答案 0 :(得分:10)
可以要求浏览器在您的情况下提供“保存文件”对话框,是的,结合使用JavaScript,服务器响应以及浏览器对该响应的处理。 / p>
以下是:
POST
将数据发送到服务器。iframe
。target
设置为iframe
。formElement.submit()
)。Content-Disposition
的{{1}}标头进行回复。这是浏览器的建议,应该保存结果而不是在浏览器中显示。如果你想变得非常花哨,可以使用我在this other answer中描述的cookie技巧,这样你就可以在收到响应时得到通知(服务器是否响应了所请求的数据,或者是错误)。我在基于浏览器的DHML + JavaScript应用程序中非常成功地使用它,用户可以在其中请求自定义PDF,并选择在浏览器窗口中查看它(在这种情况下,我的服务器包含attachment
标题)或将其另存为文件(Content-Disposition: inline
)。
答案 1 :(得分:2)
您无法使用纯JavaScript打开保存文件对话框。
编辑:好像你可以。请参阅T.J. Crowder's answer。
原始答案仍然有效:
您可以使用Flash,或者只是使用JavaScript重定向到下载页面。
例如:
$.post('/some/url', function(data) {
// lets for the moment, assume that you
// return a JSON string containing some
// parameters, data.url being the URL of
// your download file
var downloadUrl = data.url;
window.location.href = downloadUrl;
});
无法下载AJAX请求直接返回的文件。相反,将文件保存在服务器上 - 可能在临时文件中 - 并返回一个下载文件的URL,然后将其从服务器中删除。