繁体   English   中英

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

[英]Save txt file from javascript with ajax call to PHP

编辑:我有各种各样的解决方案,但我不明白为什么ajax无法正常工作。 请查看下面的修改。

  1. 我想将用javascript生成的txt文件保存到客户端计算机。
  2. 我希望用户保留在同一网页上。
  3. 我正在通过ajax通过调用php页面来实现。
  4. 我希望它可以在所有主要的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;
?>

返回的内容(即成功的数据参数)是“这是内容。\\ nLine2。\\ nLine3”。

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

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

我做了一些修补,并以一种时尚的方式做了一些有用的工作。 而不是通过ajax调用,而是用JavaScript编写

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

在我的PHP中,我将其更改为

if(!isset($_GET) || !isset($_GET['myJson'])) {
    exit(0);
}
$contents = $_GET['myJson'];

这可行。 对于小文件,这是可以的,但我想做相当大的文本文件,甚至使用lzw编码压缩。 有人知道为什么Ajax无法正常工作吗?

确保您的htmlsave.php

<?php

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM