【问题标题】:Sending data through post to php then downloading通过post发送数据到php然后下载
【发布时间】:2016-08-04 10:46:44
【问题描述】:

我有一个主题构建网站,它为另一个不相关的项目创建主题。我有一些不同的输入,其中包含数据。我能够获取数据并将它们存储在变量中。当我单击下载按钮时,我希望将变量发送到 .php 文件,然后下载该文件。我相信我可以发送它,但下载数据似乎是困难的部分。

 $("#download-theme").click(function() {
    $(function() {
        $.ajax({
            type: "POST",
            url: 'download.php',
            data: ({
                value: value
            }),
            success: function(data) {
                alert(data);
            }
        });
    });
});

我相信当我收到具有正确值的警报时,这会将其发送到 download.php 文件。我接下来要做的是将php文件的数据下载为.txt文件。也许我通过将它发送到我不确定的 php 文件来使其复杂化。

总而言之,我想从变量中获取数据并将其放入一个文件中,并让用户下载它。

编辑:我看到了 quentino 的响应并且它有效,但是我有 5 个输入需要通过一个提交按钮进行传输。

<input type="text" name="variable1" />
<input type="text" name="variable2" />
<input type="text" name="variable3" />
<input type="text" name="variable4" />
<input type="text" name="variable5" />
<input type="submit" value="send"/>

【问题讨论】:

  • 无法通过 AJAX 下载。您需要向 PHP 代码创建的文件的位置发送 GET 请求。另请注意,您不需要单击处理程序中的文档就绪处理程序,您可以删除 data 对象周围的括号。
  • 我环顾了一下。我对如何让客户端下载文件感到困惑。

标签: php jquery ajax post download


【解决方案1】:

您确定必须使用 ajax 吗?您可以使用隐藏表单执行此操作,在 onclick 事件中设置数据并发送它。一个简单的文件示例:

<?php
if (isset($_POST['data'])) {
    header("Content-disposition: attachment; filename=\"test.txt.\"");
    echo $_POST['data'];
} else {
?>
<html>
    <body>
        <form method="post"/>
            <input type="text" name="data" />
            <input type="submit" value="send"/>
        </form>
    </body>
</html>
<?php } ?>

【讨论】:

  • 我真的不想使用 ajax,但我有 5 个不同的输入。我不知道如何使用一个提交按钮来做到这一点。我希望将这 5 个输入全部发送,就像您在发送一个输入的地方一样,只需单击一个按钮,而无需单击 5 个不同的按钮。这可能吗?我需要做的就是让 5 个输入都能够像 echo $_POST['input1']; 一样被回显。回声 $_POST['input2'];回声 $_POST['input3'];等等,只需按一下按钮。
  • @JohnsonD​​oe 如果你添加 .. 在一种形式中,所有内容都将一键发送,您会收到 $_POST['input1']; $_POST['input2']; $_POST['input3'];每个都可以回显到您返回给用户的文件中。
  • 由于有很多其他代码,我不能让它们采用相同的形式。
    标签之间的其他代码是否重要?或者我可以把它们放在那里并调用输入,而不管它们之间还有什么。
  • @JohnsonD​​oe 你甚至可以使用表单属性&lt;form name="f1"&gt;&lt;/form&gt; &lt;input name="input1" form="f1" /&gt;在 HTML5 中将输入发送到表单标签之外@
【解决方案2】:

根据我的阅读,没有真正的方法可以通过 ajax 将内容提取为下载格式。我已经使用 Content Disposition 进行了测试,但它仍然无法正常工作。

如果您结帐:https://stackoverflow.com/a/20830337/3706559

他们解释说,通过更改窗口 URL,您可以触发下载。由于下载页面实际上没有任何文本内容,它只是下载它实际上不会重定向您的用户它只会下载

【讨论】:

    【解决方案3】:

    我不知道它是否正是你需要的,但我试试看。

    function ajaxrequest(){
        $(isset($_POST['yourfirstdata']){
            $yourfirstdata=$_POST['yourfirstdata'];
        }
        $myfile = fopen($_SERVER['DOCUMENT_ROOT'] . "/newfile.txt", "w");
        $txt = "$yourfirstdata";
        fwrite($myfile, $txt);
        exit;
    }
    

    这是创建文件 txt 的可能代码。我认为它必然会保存在服务器上。

    success: function(data) {
         alert(data);
            var a = $("<a>")
            .prop("href", "root-of-your-newfile/newfile.txt")
            .prop("download", "newfile.txt")
            .appendTo("body");
            a[0].click();
            a.remove();
        }
    

    只需在ajax调用“成功”后,下载文件即可。

    【讨论】:

      【解决方案4】:

      虽然这个问题有点模棱两可。我正在回答我从你的问题中理解的内容。

      是的,您可以使用 Ajax 获取文件,并且做得很好。 要让浏览器下载文件,您需要传递一些标题,以便浏览器可以这样理解它

      使用以下代码通过 PHP 传递标头(如果您在服务器端使用它)

      ob_clean();
      flush();
      $file = "somefile.xlsx";
      header('Content-Description: File Transfer');
      header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
      header('Content-Disposition: attachment; filename='.basename($file));
      header('Content-Transfer-Encoding: binary');
      header('Expires: 0');
      header('Cache-Control: must-revalidate');
      header('Pragma: public');
      header('Content-Length: ' . filesize($file));
      readfile($file);
      

      或者您也可以在 Ajax 的成功函数中使用 javaScript 传递相同的标头

      【讨论】:

        猜你喜欢
        • 2011-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-20
        • 1970-01-01
        • 2010-12-12
        • 2014-04-12
        • 2011-03-03
        相关资源
        最近更新 更多