热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

javascript–在WordPressAdmin中从PHP数组创建“下载到CSV”按钮

我已经使用函数填充了一个多维PHP数组,我希望允许我的管理员用户下载内容.我找到了一个PHP函数,它允许我将数组导出为CSV并将其放在我的functions.php中,使用第二个函

我已经使用函数填充了一个多维PHP数组,我希望允许我的管理员用户下载内容.

我找到了一个PHP函数,它允许我将数组导出为CSV并将其放在我的functions.php中,使用第二个函数将其挂钩到AJAX并使用jQuery来激活AJAX函数.

有什么问题?

所以我99%肯定AJAX正确发布到PHP函数,但由于某种原因下载没有启动.

我已经研究了很多,但很难找到解决方案 – 真的很欣赏正确方向的一点!

// Function to generate download
function convert_to_csv( $input_array, $output_file_name, $delimiter ) {
/** open raw memory as file, no need for temp files, be careful not to run out of memory thought */
$f = fopen( 'php://memory', 'w' );
/** loop through array */
foreach ( $input_array as $line ) {
/** default php csv handler **/
fputcsv( $f, $line, $delimiter );
}
/** rewrind the "file" with the csv lines **/
fseek( $f, 0 );
/** modify header to be downloadable csv file **/
header( 'Content-Type: application/csv' );
header( 'Content-Disposition: attachement; filename="' . $output_file_name . '";' );
/** Send file to browser for download */
fpassthru( $f );
}

我已经使用另一个函数将它连接到Wordpress AJAX

function laura_function() {
$input_array = $_POST["inputarray"];
convert_to_csv($input_array, 'output.csv', ',');
exit;
}
add_action('wp_ajax_nopriv_ajaxlaurafunction', 'laura_function');
add_action('wp_ajax_ajaxlaurafunction', 'laura_function');

我写了一个小jQuery函数来点击按钮进行AJAX调用



jQuery(document).ready(function () {
jQuery('#downloadcsv').click(function () {
var data = {
action: 'ajaxlaurafunction', // Calls PHP function - note it must be hooked to AJAX
inputarray: '', // Sends a variable to be used in PHP function
};
// This is a shortened version of: https://api.jquery.com/jquery.post/
jQuery.post("", data, function () {
//window.location.replace(location.pathname)
});
});
});

解决方法:

继@charlietfl建议后,我发现“你不能通过Ajax来实现,因为Javascript无法将文件直接保存到用户的计算机上(出于安全考虑).– According to this post”

替代方案

我的替代解决方案是使用’post方法’来设置post参数.

// Form on Page



如果已发布’download_csv’参数,则此代码将运行以下载数据.目前我的代码将输出虚拟数据,但我正在努力.

add_action("admin_init", "download_csv");
function download_csv() {
if (isset($_POST['download_csv'])) {
function outputCsv( $fileName, $assocDataArray ) {
ob_clean();
header( 'Pragma: public' );
header( 'Expires: 0' );
header( 'Cache-Control: must-revalidate, post-check=0, pre-check=0' );
header( 'Cache-Control: private', false );
header( 'Content-Type: text/csv' );
header( 'Content-Disposition: attachment;filename=' . $fileName );
if ( isset( $assocDataArray['0'] ) ) {
$fp = fopen( 'php://output', 'w' );
fputcsv( $fp, array_keys( $assocDataArray['0'] ) );
foreach ( $assocDataArray AS $values ) {
fputcsv( $fp, $values );
}
fclose( $fp );
}
ob_flush();
}
// This is dummy data.
$data = array(
array( 'item' => 'Server', 'cost' => 10000, 'approved by' => 'Joe' ),
array( 'item' => 'Mt Dew', 'cost' => 1.25, 'approved by' => 'John' ),
array( 'item' => 'IntelliJ IDEA', 'cost' => 500, 'approved by' => 'James' ),
);
outputCsv( 'expenses.csv', $data );
exit; // This is really important - otherwise it shoves all of your page code into the download
}
}


推荐阅读
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • javascript  – 概述在Firefox上无法正常工作
    我试图提出一些自定义大纲,以达到一些Web可访问性建议.但我不能用Firefox制作.这就是它在Chrome上的外观:而那个图标实际上是一个锚点.在Firefox上,它只概述了整个 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • PHP中的curl_multi系列函数可以实现同时请求多个URL来实现并发,而不是像普通curl函数那样请求后会阻塞,直到结果返回才进行下一个请求。因此在批量请求URL时可通过curl_multi系列函数提升程序的运行效率。curl普通请求$startT ... [详细]
  • 渗透测试基础bypass绕过阻挡我们的WAF(下)
    渗透测试基础-bypass ... [详细]
  • 本文介绍了如何使用python从列表中删除所有的零,并将结果以列表形式输出,同时提供了示例格式。 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 集合的遍历方式及其局限性
    本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。 ... [详细]
author-avatar
Jen覀nyfraaaaa-v-
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有