gpt4 book ai didi

javascript - 将数据从 js 传递到 php 并下载创建的 csv 文件

转载 作者:行者123 更新时间:2023-11-30 11:51:30 25 4
gpt4 key购买 nike

我必须使用 $.post() 将数组从 JS 传递到 PHP,使用数组创建文件并下载它。

使用此传递数组:

$('#csv').click(function () {
$.post(
window.location + "crawler/save_to_file",
{
dane: wynik //array
});
});

现在在 PHP 中使用这个:

$tablica=$_POST['dane'];
$filename = "export-to-csv.csv";
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-type: text/csv");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Expires: 0");
$fh = fopen( 'php://output', 'w' );
$heading = false;
if(!empty($tablica))
foreach($tablica as $row) {
if(!$heading) {
fputcsv($fh, array_keys($row));
$heading = true;
}
fputcsv($fh, array_values($row));
}
fclose($fh);

但是当单击按钮创建和下载文件时,没有任何反应。

谢谢

代码更新

JS文件:

   $.ajax({
url: window.location + "crawler/",
type: "POST",
dataType: "json",
data: {
wartosc: zmienna
},
success: function (odp) {
wynik = odp; //array
tab = JSON.stringify(odp);
$.post(window.location + "crawler/return_data",
{
data: tab
},
function (data) {
$('#wynik').html(data);
$('.pobierz').show();
}
)
}
})


$('.button').click(function() {
var $form = $('<form action="' + window.location + 'crawler/save_to_csv" method="post"></form>');
$.each(wynik, function() {
$('<input type="hidden" name="dane[]">').attr('value', this).appendTo($form);
});
$form.appendTo('body').submit();
});

以及 PHP 文件中的 var_dump 数组:

function save_to_csv()
{
$tablica=$_GET['dane'];
var_dump($tablica);

}

返回:“未定义索引:dane”

编辑

$tablica 必须是 $_POST 而不是 $_GET

最佳答案

这可以通过 AJAX 完成,但您需要使用文件 api。所以你做这样的事情:

$.post("csv.php", {
dane: wynik //array
}, function(response){
var blob = new Blob([response], { type:'text/csv' });
alert(URL.createObjectURL(blob));
});

您从警报中获取的 URL 包含您的 csv 文件。

当然,如果您想直接转到将警报替换为的文件:

window.location.href=URL.createObjectURL(blob);

更新

如果您想使用自定义文件名,可以通过使用 a 元素来屏蔽由 URL.createObjectURL() 生成的 url。我们可以使用新的 HTML5 属性 download,它允许我们屏蔽 url。

这是更新后的代码:

$.post("csv.php", {
dane: wynik //array
}, function(response){
var blob = new Blob([response], { type:'text/csv' }),
a = document.createElement('a'),
url = URL.createObjectURL(blob);

// Put the link somewhere in the body
document.body.appendChild(a);
a.innerHTML = 'download me';
a.href = url;
// Set our custom filename
a.download = 'myfilename.csv';
// Automatically click the link
a.click();
});

关于javascript - 将数据从 js 传递到 php 并下载创建的 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39315851/

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