Как сохранить ответ AJAX в (текстовом) файле с помощью JS, jQuery? - PullRequest
3 голосов
/ 03 сентября 2010

Кажется, что этот вопрос периодически задают, и общий ответ таков: «В любом случае, вы не должны делать это с AJAX. Просто установите местоположение окна для файла».

Но я пытаюсь запроситьфайл, который на самом деле нигде не существует на сервере.Он динамически генерируется (в представлении Django) с учетом параметров контекста GET / POST.Файл, который я хочу получить через AJAX и затем сохранить на клиентском компьютере, является текстовым файлом (csv).

В настоящее время я могу получить текст на клиентском компьютере (и могу убедиться в этом, увидев егорегистрации или оповещения), но не может затем выяснить, как сохранить этот текст в файл внутри обратного обратного вызова AJAX fn.

По сути, возможно ли это, может ли это сделать JS?То есть, чтобы открыть диалоги сохранения файла для «файлов», которые на самом деле являются текстом ответа AJAX?

Ответы [ 6 ]

1 голос
/ 03 сентября 2010

Как уже упоминалось, вы не можете сделать это только с помощью JavaScript.

IMO лучшим вариантом будет Flash 10+ FileReference API .

Есть несколько хороших библиотек-оболочек JavaScript, таких как Downloadify , которые предоставляют JavaScript API для доступа к этим методам.

Посмотрите на это демо .

1 голос
/ 03 сентября 2010

С точки зрения браузера, не имеет значения, существует файл или нет, это просто ресурс на сервере, который он запрашивает. Я думаю, что вам нужно будет сделать какую-то версию "Просто установите расположение окна в файл". Если вы установите тип содержимого в заголовке на то, что браузер не распознает, я думаю, он спросит пользователя, хотят ли они сохранить его.

0 голосов
/ 23 сентября 2010

У меня такая же проблема.Вы можете попробовать это

<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;
});
0 голосов
/ 03 сентября 2010

Не могли бы вы использовать для этого функцию PHP rename () вместо просто Javascript?Вызовите файл PHP и передайте имя файла, который вы хотите скопировать, а также куда в качестве параметров?

0 голосов
/ 03 сентября 2010

В основном нет.Javascript не может сохранить что-либо на локальном компьютере из-за ограничений безопасности.Лучше всего иметь подписанный апплет, которому пользователь может доверять, чтобы написать файл, или поместить его в текстовую область, которую затем можно легко скопировать и вставить в новый файл.

0 голосов
/ 03 сентября 2010

Это не то, что JavaScript (и, следовательно, jQuery или что-то другое JS Framework) разрешено делать из соображений безопасности. Возможно, вы сможете сделать то, что вы хотите, чтобы прошить или другой маршрут, но не JavaScript. Имейте в виду, что у Flash есть свои ограничения безопасности.

(Да, IE может сделать это через объект ActiveX, но я не считаю это "решением" здесь)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...