角度POST不能按预期工作(PHP)

时间:2016-09-29 20:59:27

标签: javascript php angularjs

我使用angular在我的控制器中使用以下代码点击发出请求...

var request = $http({
    method: "post",
    url: "../submit.php",
    data: {
        templateData: $scope.template

    },
    headers: { 'Content-Type': 'application/x-www-form-urlencoded' }
});

我将数据发送到名为submit.php的php文件,一切正常,submit.php接收数据。我对数据做的下一件事是将其写入文件...

$postdata = file_get_contents("php://input");
$request = json_decode($postdata);

$contentFile = fopen("file.txt", "w"); 
fwrite($contentFile, $template);
fclose($contentFile);

这似乎有效,我没有错误。但现在,我想要发生的下一件事是将文件下载到浏览器。此代码应该可以工作,但由于某种原因它不会下载到浏览器...

header('Pragma: anytextexeptno-cache', true);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=\"file.txt\"");

完整代码

<?php 

    $postdata = file_get_contents("php://input");
    $request = json_decode($postdata);

    $template = "";
    foreach ($request as $data) {
        foreach ($data as $sub) {
            for ($i = 0; $i < count($sub); $i++) {
                $template .= $sub[$i];
            }

        }
     }


$contentFile = fopen("file.txt", "w"); 
fwrite($contentFile, $template);
fclose($contentFile);

header('Pragma: anytextexeptno-cache', true);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=\"file.txt\"");

?>

2 个答案:

答案 0 :(得分:0)

您唯一遗漏的是实际输出您的“文件”。

<?php 
$postdata = file_get_contents("php://input");
$request = json_decode($postdata);

$template = "";
foreach ($request as $data) {
    foreach ($data as $sub) {
        for ($i = 0; $i < count($sub); $i++) {
            $template .= $sub[$i];
        }

    }
}

header('Pragma: anytextexeptno-cache', true);
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=\"file.txt\"");

// here's the thing:
echo $template;
?>

这仅适用于text / plain 您无需先将内容保存到文件中。


您永远不能强制浏览器“下载”文件。某些浏览器可能决定显示该文件。文件“陌生人”,提示用户下载的可能性越大。

答案 1 :(得分:0)

include_recipe CB1::install_app

并且在ajax成功中,您可以使用window.location函数在新窗口中打开该文件。