【问题标题】:With JS, jQuery, how do I save an AJAX response to a (text) file?使用 JS、jQuery,如何将 AJAX 响应保存到(文本)文件?
【发布时间】:2011-04-07 14:54:47
【问题描述】:

似乎这个问题是定期提出的,常见的回答是“无论如何你都不应该用 AJAX 这样做。只需将窗口位置设置为文件即可。”

但我正在尝试请求一个实际上并不存在于服务器上的文件。给定 GET/POST 上下文参数,它是动态生成的(由 Django 视图)。我想通过 AJAX 检索然后保存到客户端计算机的文件是文本文件 (csv)。

我目前可以将文本发送到客户端计算机(并且可以通过在日志记录或警报中查看来验证这一点),但无法弄清楚如何将此文本保存到 AJAX 成功回调 fn 内的文件中。

本质上,这可能吗,是JS可以做到的吗?也就是说,要为实际上是 AJAX 响应文本的“文件”打开文件保存对话框?

【问题讨论】:

    标签: javascript jquery ajax django csv


    【解决方案1】:

    从浏览器的角度来看,文件是否存在并不重要,它只是它所请求的服务器上的资源。我认为您将需要执行某些版本的“只需将窗口位置设置为文件”。如果您将标头中的内容类型设置为浏览器无法识别的内容,我相信它会询问用户是否要保存它。

    【讨论】:

    • 我想我要做的是模拟通过 JS 提交的表单。我找到了一个 jQuery 插件可以做到这一点。这不是我想要的,但我的解决方案可能基于此:filamentgroup.com/lab/…
    【解决方案2】:

    正如其他人所提到的,你不能只使用 JavaScript 来做到这一点。

    IMO 最好的选择是 Flash 10+ FileReference API

    有一些很好的 JavaScript 包装库,例如 Downloadify,它们提供了一个 JavaScript API 来访问这些方法。

    看看这个demo

    【讨论】:

    • 感谢信息 CMS。我认为您的解决方案运行良好(感谢提供演示链接),但我已在该项目的其他地方努力远离 Flash。这主要是为了与 iPhone 兼容……但我想 iOS 无论如何都不会处理文件下载。嗯……我得再想想这个。
    【解决方案3】:

    出于安全原因,JavaScript(因此 jQuery 或任何其他 JS 框架)不允许这样做。你也许可以做你想做的事情或其他路线,但不是 JavaScript。请记住,Flash 对此也有自己的一系列安全限制。

    (是的,IE 可以通过 ActiveX 对象执行此操作,但我不将其视为“解决方案”)

    【讨论】:

    • 感谢您不将 IE/ActiveX 视为解决方案...我也不会。似乎这对于 JS 来说是不可能的,我想避开 Flash、其他 MS 或专有框架。所以我可能只是使用 JS 来包含、填充,然后完全在幕后提交 HTML 表单。
    【解决方案4】:

    基本上没有。由于安全限制,Javascript 无法将任何内容保存到本地计算机。您最好的选择可能是拥有一个用户可以信任的签名小程序来编写文件,或者将其放在文本区域中,然后他们可以轻松地将其复制并粘贴到新文件中。

    【讨论】:

    • 文本文件可能是 CSV 文件中原始数据的巨大(几 MB)文本文件。大小因用户选项而异......但仍然可能太大而无法剪切和粘贴。不过我之前没有提到过……所以对于小文件,这可能是一个很好的解决方案。
    【解决方案5】:

    您不能为此使用 PHP rename() 函数,而不仅仅是使用 Javascript 吗?调用 PHP 文件并传递要复制的文件的名称以及参数在哪里?

    【讨论】:

    • 没有。 PHP 在服务器上运行,而不是在浏览器中。
    • 同意,我认为我们同意 JS 无法完成这项任务,所以我提供了其他人所做的替代方案,但无论如何感谢您的提示,尽管这是我已经知道的。跨度>
    • 我在服务器端使用 Django(所以 Python)......所以我必须看看是否有在 python 中做同样事情的好方法。
    【解决方案6】:

    我也有同样的问题。你可以试试这个

    <button id="Save">Save</button>
    <img src="MakeThumbnail.ashx?Image=1.jpg" id="imgCrop">
    
    $("#Save").click(function (e) {
        url = $("#imgCrop").attr("src")+"&Action=Save"
        e.preventDefault();  //stop the browser from following
        window.location.href = url;
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-29
      • 2021-11-15
      • 2019-06-04
      • 1970-01-01
      相关资源
      最近更新 更多