Сохранить как текстовый файл JavaScript - PullRequest
0 голосов
/ 05 апреля 2011

В настоящее время я использую этот код:

<?php
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename="'.$_POST['savename'].'.bob"');
echo($_POST['savedata'])
?>

Он получает данные формы, создает вложение и отправляет его обратно.Это бесполезно, потому что у клиента есть данные.Я хотел бы переписать это на:

myForm.onsubmit = SomeSaveToFileFunction()

Ответы [ 3 ]

2 голосов
/ 06 января 2014

Chrome может сделать это сейчас.

HTML

<textarea></textarea><button>save</button>

Javascript

document.getElementsByTagName('button')[0].onclick = function(){

  var a = document.createElement('a');

  a.href = 'data:text/plain;base64,'+
    btoa(document.getElementsByTagName('textarea')[0].value);

  a.textContent = 'download';
  a.download = 'text.txt';
  a.click();

}

DEMO

http://jsfiddle.net/88BYB/3/

РЕДАКТИРОВАТЬ последнюю версию Chrome не принимает атрибут загрузки. (Chrome35)

1 голос
/ 05 апреля 2011

Трафик действительно может быть бесполезным.Ты прав.Но, как сказал Пойнти, к сожалению, просто невозможно использовать javascript.

Если вы просто хотите, чтобы загрузка была реализована более элегантным способом (чем перезагрузка страницы), используйте «скрытый» iframe,который загружает PHP-ответ.Возможно, вы могли бы легко переключить обработку PHP с POST на GET и ...

myForm.onsubmit = function(formValueSavename, formValueSavedata) { 
// phpIframeRef addresses you hidden iframe
phpIframeRef.loaction.href = 'sendData.php?savename=' + formValueSavename + '&savedata=' + formValueSavedata;
}

Возможно, вам понадобится некоторый код для подавления обработки формы по умолчанию ... что я не знаю.

0 голосов
/ 05 апреля 2011

JavaScript не может напрямую записывать файлы на локальный компьютер по очевидным причинам безопасности. Тем не менее, вы можете сделать только то, что вам нужно, используя объект ActiveX, но, опять же, он будет работать только с IE. Затем вам понадобятся эквиваленты, такие как NPAPI, чтобы сделать его совместимым, например, с Chrome.

Полагаю, вам следует придерживаться того способа, которым вы на самом деле это делаете, если он работает так, как вы этого хотите.

РЕДАКТИРОВАТЬ: я имел в виду NPAPI, а не "API". Он позволяет создавать подключаемые модули, которые работают (вроде), так же, как ActiveX, и позволяет делать то же самое.

...