2015-04-23 130 views
3

我需要将一个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; 

?> 
+0

你如何在你的app中调用'$ http'?使用模型,控制器等? –

+0

以target =“_ blank”或window.open显示成功时的“下载”链接。 –

回答

2

我有类似的问题,我不能与$http做。所以我以编程方式创建了带有method="post"target="_blank"的html表单。我用隐藏的元素发送了我需要发送的数据。在我提交表格后,我将它从dom中删除。

让我知道如果你找到另一种解决方案,使用$http

+0

我相信如你所说,通过'$ http'是不可能的。我遵循你的建议,并且完美运作。 –

+0

我也遇到了类似的问题,http可以做但后期不能做同样的事情。表单提交可能适用于我,但是您可以如何处理来自帖子请求的回复?谢谢。 – early

相关问题