2015-04-23 127 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

相關問題