使用JS,jQuery,如何将AJAX响应保存到(文本)文件?

时间:2010-09-02 23:46:04

标签: javascript jquery ajax django csv

似乎这个问题是定期询问的,而且常见的回答是“你不应该用AJAX这样做。只需将窗口位置设置为文件。”

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

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

基本上,这是否可能,JS能做什么?也就是说,打开实际是AJAX响应文本的“文件”的文件保存对话框?

6 个答案:

答案 0 :(得分:1)

从浏览器的角度来看,无论文件是否存在都无关紧要,它只是它所请求的服务器上的资源。我想你需要做一些版本的“只需将窗口位置设置为文件”。如果您将标题中的内容类型设置为浏览器无法识别的内容,我相信它会询问用户是否要保存它。

答案 1 :(得分:1)

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

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

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

看看这个demo

答案 2 :(得分:0)

出于安全原因,这不是JavaScript(因此jQuery或任何其他JS框架)可以做的事情。您可能能够执行您想要闪存或其他路线的操作,但不能使用JavaScript。请记住,Flash也有自己的一系列安全限制。

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

你可以不使用PHP rename()函数,而不仅仅是Javascript吗?调用PHP文件并传递要复制的文件的名称以及作为参数的位置?

答案 5 :(得分:-1)

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

<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;
});