是否可以使用JavaScript生成保存文件对话框?

时间:2011-03-16 11:48:24

标签: jquery

我使用jquery ajax将一些数据发布到服务器。服务器会发出一个文件(如果请求成功)。我只是想知道如何在成功回调中启动保存文件对话框给出结果?感谢。

PS:

最简单的解决方案是:

$('#ExportToExcel').click(function () {
                $('#form').attr({ action: 'bla' });
                $('#form').submit();
                return false;
            });

2 个答案:

答案 0 :(得分:10)

可以要求浏览器在您的情况下提供“保存文件”对话框,是的,结合使用JavaScript,服务器响应以及浏览器对该响应的处理。 / p>

以下是:

  1. 创建表格以POST将数据发送到服务器。
  2. 创建一个具有唯一名称的隐藏iframe
  3. 将表单的target设置为iframe
  4. 的名称
  5. 发送表单(例如formElement.submit())。
  6. 让您的服务器使用值Content-Disposition的{​​{1}}标头进行回复。这是浏览器的建议,应该保存结果而不是在浏览器中显示。
  7. 如果你想变得非常花哨,可以使用我在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,然后将其从服务器中删除。

相关问题