Javascript 下载不使用iframe的文件

Javascript 下载不使用iframe的文件,javascript,html,google-chrome,iframe,Javascript,Html,Google Chrome,Iframe,我正在制作一个express应用程序,当用户单击“下载”时,导出文件时遇到问题 我的方法是使用内容向服务器发出ajax请求,然后在服务器上创建文件并发回文件路径。从那里,我用文件路径调整iframe元素的src属性 但是,Chrome(或者任何浏览器)上都没有发生任何事情。如果我查看inspector的network选项卡,它显示它收到了文件OK(带有200响应代码),并且内容就在那里。另外,iframe具有正确的src。我想要一个下载对话框弹出,但似乎无法得到它 有什么想法吗?谢谢大家! 示

我正在制作一个express应用程序,当用户单击“下载”时,导出文件时遇到问题

我的方法是使用内容向服务器发出ajax请求,然后在服务器上创建文件并发回文件路径。从那里,我用文件路径调整
iframe
元素的
src
属性

但是,Chrome(或者任何浏览器)上都没有发生任何事情。如果我查看inspector的network选项卡,它显示它收到了文件OK(带有200响应代码),并且内容就在那里。另外,
iframe
具有正确的
src
。我想要一个下载对话框弹出,但似乎无法得到它

有什么想法吗?谢谢大家!


示例代码

app.js(服务器)

script.js(客户端)

当发布到服务器(
/create html
)和服务器发送回数据(
test.html
)时,我得到了
200
s。
test.html
文件的内容显示在web检查器中,转到
/files/test.html
显示页面。但是,我无法下载HTML


有什么想法吗?

对于ExpressJS,您可以使用以下方法:

apt.get('/create-html', function (req, res) {
  var name       = "test.html"
      , filepath = (__dirname + "/public/files/" + name);

  res.download(filepath, name);
});

是否有任何示例或代码?请查看返回的内容,并确保您具有正确的HTTP响应头:内容处置:附件;文件名=。你也可以尝试我创建的一个插件来帮助下载文件。它也使用了iframe,并且经过了很好的测试:谢谢你的提示,@JohnCulviner。在发送回Express之前,我正在Express的响应对象中使用该头。我也可以在检查员那里核实。还有其他想法吗?iframe中显示了什么?如果浏览器没有将其视为可能的下载,它似乎应该做其他事情(例如显示)。嘿@Brilliand,我给iframe一个类来直观地隐藏它,但是当我删除该类时,它会显示在iframe中。因此,它正确地获取了数据——只是没有下载数据。
$("#export-html").click( function(e) {
    e.preventDefault();
    var html = $("#html-wrapper").html(); // the html of the file we want to make

    $.ajax({
          method: "POST"
        , url: "/create-html"
        , headers: {
            "Content-Disposition": 'attachment; filename="test.html"'
          }
        , type: "JSON"
        , success: function(resp) {
              var iframe = document.getElementById("iframe")
                , fp_prefix = "/files/"
                , fp = fp_prefix + resp.data; // ex: "/files/test.html" - the path where the file can be accessed

              iframe.src = fp
          }
    })

})
apt.get('/create-html', function (req, res) {
  var name       = "test.html"
      , filepath = (__dirname + "/public/files/" + name);

  res.download(filepath, name);
});