Javascript 将数据从js传递到php并下载创建的csv文件
我必须使用$.post()将数组从JS传递到PHP,使用数组创建文件并下载它 使用此过程数组:Javascript 将数据从js传递到php并下载创建的csv文件,javascript,php,ajax,file,Javascript,Php,Ajax,File,我必须使用$.post()将数组从JS传递到PHP,使用数组创建文件并下载它 使用此过程数组: $('#csv').click(function () { $.post( window.location + "crawler/save_to_file", { dane: wynik //array }); }); 现在在PHP中使用以下命令: $tablica=$_POST['dane']; $filename = "export-to-csv.c
$('#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();
});
返回:“未定义索引:丹麦”
编辑
$tablica必须是
$\u POST
而不是$\u GET
是否强制使用AJAX将该数组发送到PHP代码?如果是
否则,您可以使用包含数组项的隐藏输入构建一个隐藏表单,并通过JavaScript提交,而不是AJAX调用
更新
使用JS构建表单的简短示例:
$('#csv').click(function() {
var $form = $('<form action="' + window.location + 'crawler/save_to_file" method="post"></form>');
$.each(wynik, function() {
$('<input type="hidden" name="dane[]">').attr('value', this).appendTo($form);
});
$form.appendTo('body').submit();
});
$('#csv')。单击(函数(){
变量$form=$('');
$.each(wynik,function(){
$('').attr('value',this).appendTo($form);
});
$form.appendTo('body').submit();
});
您是否被迫使用AJAX将该数组发送到PHP代码?如果是
否则,您可以使用包含数组项的隐藏输入构建一个隐藏表单,并通过JavaScript提交,而不是AJAX调用
更新
使用JS构建表单的简短示例:
$('#csv').click(function() {
var $form = $('<form action="' + window.location + 'crawler/save_to_file" method="post"></form>');
$.each(wynik, function() {
$('<input type="hidden" name="dane[]">').attr('value', this).appendTo($form);
});
$form.appendTo('body').submit();
});
$('#csv')。单击(函数(){
变量$form=$('');
$.each(wynik,function(){
$('').attr('value',this).appendTo($form);
});
$form.appendTo('body').submit();
});
这可以通过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();
});
这可以通过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();
});
你检查
非空$data
在哪里设置了$data
吗?哦,写这个问题时忘记更改变量了,现在更新你检查非空$data
在哪里设置了$data
吗?哦,写这个问题时忘记更改变量了,现在更新你能给我一个例子链接吗?错误:“未定义索引:dane”在尝试使用$_POST['dane']捕获php文件中的数组时;@Marcin:您可以发布更新的代码吗?或者您可以使用Chrome DevTools或Firebug检查POST请求吗?您能给我一个示例链接吗?错误:“未定义索引:dane”在尝试使用$_POST['dane'捕获php文件中的数组时;@Marcin:你能发布你更新的代码吗?或者你能用Chrome DevTools或Firebug检查发布请求吗?谢谢,如果使用这个:window.location.href=URL.createObjectURL(blob);这是替换项,a.click()
方法将触发click事件,因此您将获得该保存对话框。尝试一下。很高兴能提供帮助。document.body.appendChild(a);
是不必要的,它可能会破坏布局。如果使用此方法,如何执行此操作:window.location.href=URL.createObjectURL(blob);这是替换项,a.click()
方法将触发单击事件,因此您将获得保存对话框。尝试一下。很乐意提供帮助。document.body.appendChild(a);
是不必要的,它可能会破坏布局