目前,我正在使用此代码:
<?php
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename="'.$_POST['savename'].'.bob"');
echo($_POST['savedata'])
?>
它获取表单的数据,创建附件并将其发回。这没用,因为客户端有数据。我想把它重写为:
myForm.onsubmit = SomeSaveToFileFunction()
答案 0 :(得分:2)
Chrome现在可以做到这一点。
<textarea></textarea><button>save</button>
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();
}
答案 1 :(得分:1)
确实,流量可能毫无用处。你是对的。但就像Pointy说的那样,不幸的是,单纯使用javascript是没有办法的。
如果您希望以更优雅的方式(而不是页面重新加载)实现下载,请使用加载PHP响应的“隐藏”iframe。也许你可以轻松地将PHP处理从POST切换到GET和......
myForm.onsubmit = function(formValueSavename, formValueSavedata) {
// phpIframeRef addresses you hidden iframe
phpIframeRef.loaction.href = 'sendData.php?savename=' + formValueSavename + '&savedata=' + formValueSavedata;
}
你可能需要一些代码来抑制你对表单的默认处理......我不知道。
答案 2 :(得分:0)
出于明显的安全原因,JavaScript无法直接在本地计算机上写入文件。但是,您可以使用ActiveX对象完成所需的操作,但再一次,它只能用于IE。然后,您需要像NPAPI这样的等价物,以使其与Chrome兼容。
我想你应该保持你实际做的方式,如果它像你想要的那样工作。
编辑:我的意思是NPAPI,而不是“API”。它允许您以与ActiveX相同的方式构建工作(类型)的插件,并允许您执行相同的操作。