gpt4 book ai didi

javascript - 将 csv 文件从 php 发送到浏览器

转载 作者:行者123 更新时间:2023-11-27 23:36:26 24 4
gpt4 key购买 nike

我已经查看了很多这方面的资源,但我仍然无法让它工作。我想单击 html 中的链接并让它获取一个文本文件(恰好是 csv)。

        <button type="button" id="csvButton"  class="genericButton"><a id="csvAnchor">Create CSV File</a></button><br/>

然后在 JavaScript 中:

function getCSVText(evt)  {

if (currentChecklistCountry) {

$.post('../php/sendCSV.php',
{
country : currentChecklistCountry,
},
function (data, textStatus, jqXHR){
// console.log("PHP : sendCSV.php");
// console.log("sendCSV.php, data = " + data);
}
)
.fail(function() { console.log("error in sendCSV.php"); })
.always(function() { console.log("sendCSV.php finished"); });

// var a = document.getElementById("csvAnchor");

// download attribute only currently (12/4/2015) works in Chrome and Edge
// a.href = "Countries/" + currentChecklistCountry + "CSV.txt";
// a.download = currentChecklistCountry + "CSV.txt";

// a.target = "_blank";
// a.href = "../php/sendCSV.php?country=" + currentChecklistCountry + "";
}
else checklistCountryButton.classList.add("needsAttention");
}
}

因为注释掉的 a.download 或 a.href 方法仅在 Edge 和 Chrome 中工作,所以我尝试使用 php 来执行此操作。

还有 php:

<?php
// set_time_limit(0);
// ignore_user_abort(false);
// ini_set('output_buffering', 0);
// ini_set('zlib.output_compression', 0)

ini_set('display_errors', '1');
error_reporting(E_ALL | E_STRICT);

$country = $_POST['country'];

// echo "country = " . $country;
if (!isset($country)) { echo "failure"; exit; }
// echo "after isset";
$fileName = '../Countries/' . $country . 'CSV.txt';

// echo "fileName = " . $fileName;

if(file_exists($fileName)) {

// header("Content-Type: text/plain");
header("Content-type: application/octet-stream");
// header("Content-Disposition: attachment; filename=" . $country . "CSV.txt");
header("Content-disposition: attachment;filename="'. basename($fileName).'"' );
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($fileName));
ob_clean();
flush();
readfile($fileName);
exit;
}
else {
echo "file does not exist : " . $country;
}
?>

它只是默默地失败,服务器或控制台上没有错误消息。数据在ajax函数中返回,但不是以文件下载的形式。

谢谢。

[编辑] Vir 是正确的。通过在 js 文件中进行此修改,它可以工作:

  var form = $('<form method="post" action="../php/sendCSV.php?country=' + currentChecklistCountry + '"></form>');
$('body').append (form);
form.submit ();
form.remove ();

非常感谢。

最佳答案

Ajax 不支持下载(触发保存对话框)。您能做的最好的事情就是创建临时表单 DOMElement,将其附加到文档的正文,触发其提交方法,最后将其从 DOM 树中删除。像这样的事情:

var form = $('<form method="post" action="../php/sendCSV.php"></form>');
$('body').append (form);
form.submit ();
form.remove ();

关于javascript - 将 csv 文件从 php 发送到浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34101096/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com