【发布时间】: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 不工作吗?
【问题讨论】:
-
你打开
<?php了吗? -
我已经编辑了要放入
-
@FuePi 我已经尝试过该链接,但似乎没有任何效果。
-
你试过了吗:
header("Content-Type: application/force-download");
标签: javascript php ajax save