我需要将一个POST
从Angular创建为一个URL ./makeFile.php
,它将根据数据库中提供的信息创建一个包含数据库查询内容的文件。
PHP强制浏览器打开一个保存对话框,而不是仅仅显示与这两条线的响应:
header('Content-Disposition: attachment; filename="' . $file_name . '.prj"');
echo $json;
但制作使用$http
AngularJS一个POST
强制浏览器无法打开此保存对话框:
$http({
method: 'POST',
url: './makeFile.php',
data: {
project: ProjectService.getProject()
}
})
我不能让一个GET
因为数据是一个网址太长,否则我会用一个简单的$window.open('./makeFile.php', '_blank')
这在小型的数据(罕见)情况下工作的更换。
如何让Angular将此POST
添加到另一个窗口或让浏览器打开保存对话框?
编辑:
随着伊万的建议,我不得不以编程方式创建一个表单来达到我想要的。以下是我做的:
的JavaScript:
var form = document.createElement('form');
form.action = './php/saveProject.php';
form.method = 'POST';
form.target = '_blank';
form.style.display = 'none';
var input = document.createElement('input');
input.type = 'text';
input.name = 'project';
input.value = angular.toJson(ProjectService.getProject(), false);
var submit = document.createElement('input');
submit.type = 'submit';
submit.id = 'submitProject';
form.appendChild(input);
form.appendChild(submit);
document.body.appendChild(form);
$('#submitProject').click();
document.body.removeChild(form);
PHP:
<?php
$project = get_magic_quotes_gpc() ? stripslashes($_POST['project']) : $_POST['project'];
// ...
header('Content-Disposition: attachment; filename="' . $file_name . '.prj"');
echo $json;
?>
你如何在你的app中调用'$ http'?使用模型,控制器等? –
以target =“_ blank”或window.open显示成功时的“下载”链接。 –