使用ajax调用从javascript保存txt文件到PHP

Posted

技术标签:

【中文标题】使用ajax调用从javascript保存txt文件到PHP【英文标题】:Save txt file from javascript with ajax call to PHP 【发布时间】:2016-06-03 13:18:20 【问题描述】:

编辑:我有各种各样的解决方案,但我不明白为什么 ajax 不起作用。请参阅下面的编辑。

    我想将 javascript 生成的 txt 文件保存到客户端。 我希望用户留在同一个网页上。 我是通过 ajax 调用 php 页面来实现的。 我希望它可以在所有主要的 PC 浏览器中运行; Chrome、Firefox、Internet Explorer 和 Edge。

这是我目前所拥有的:

htmlsave.js

dataARR = 
    SaveFile: "This is the content.\nLine2.\nLine3"
;
var dataJSON = JSON.stringify(dataARR);
$.ajax(
    type: "POST",
    url: "htmlsave.php",
    async: true,
    cache: false,
    crossDomain: false,
    data:  myJson: dataJSON ,

    success: function (data) 
        alert("success");
    ,
    error: function (XMLHttpRequest, textStatus, errorThrown) 
        alert("failure");
    
);

htmlsave.php

<?php
if(!isset($_POST) || !isset($_POST['myJson'])) 
    exit(0);

$data = json_decode($_POST['myJson'], true);
if(!array_key_exists('SaveFile', $data) || !isset($data['SaveFile']))
    exit(0);

$contents = strval($data['SaveFile']);

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false); // required for certain browsers
header("Content-Type: text/plain");
header("Content-Disposition: attachment; filename=\"mysavefile.txt\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . strlen($contents));
ob_clean();
flush();
echo $contents;
?>

返回的(即成功的数据参数)是“This is the content.\nLine2.\nLine3”。

没有提示保存内容为“这是内容。\nLine2.\nLine3”的文件,正如我所希望的那样。

编辑:一个解决方案(但不是一个很好的解决方案)

我做了一些修补,并以某种方式制作了一些可行的东西。我没有通过 ajax 调用,而是在我的 javascript 中编写

document.location = "htmlsave.php?myJson=Line1Line2";

在我的 php 中,我已将其更改为 get with

if(!isset($_GET) || !isset($_GET['myJson'])) 
    exit(0);

$contents = $_GET['myJson'];

这行得通。这对于小文件来说没问题,但我想做相当大的文本文件,甚至使用 lzw 编码进行压缩。有人知道为什么 Ajax 不工作吗?

【问题讨论】:

你打开&lt;?php了吗? How to Automatically Start a Download in PHP?的可能重复 我已经编辑了要放入 @FuePi 我已经尝试过该链接,但似乎没有任何效果。 你试过了吗:header("Content-Type: application/force-download"); 【参考方案1】:

确保您的 htmlsave.php

开头
<?php

如果是,请查看您的网络服务器是否配置为将 .php 文件传递​​给您的 php 实现(fpm、mod_php 等...)

【讨论】:

我已经编辑了要放入 那么很可能是您的 Web 服务器没有将文件处理到 php 解析器的问题。您正在运行什么 Web 服务器以及哪个 php 版本? 我在 windows 10 上使用 wamp server 64 位版本 3(最新)。 感谢您的回复。如何检查,“那么很可能是您的 Web 服务器没有将文件处理到 php 解析器的问题。” 我真的无法帮助配置 wamp,但是您尝试在浏览器中输入 htmlsave.php 的 URL 或 curl 并跟踪您的 Web 服务器日志。首先,确保您是否会在浏览器中获得纯 php 文件,以便这是正确的情况,然后在适当的论坛上提出一个新问题(可能是webmasters.stackexchange.com)。

以上是关于使用ajax调用从javascript保存txt文件到PHP的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 PHP 从 HTML 文本区域保存 TXT 文件?

从 Jquery Ajax 调用中设置 CodeMirror 文本区域的值

在 Spotify(Javascript)中进行 ajax 调用后没有保存 Cookie?

将文本区域的文本保存在数据库中

使用 JavaScript 将 ajax 的结果附加到文本区域

稳步减慢从 javascript 对 WCF 服务的 ajax 调用