繁体   English   中英

发布到 phpspreadsheet

[英]POST to phpspreadsheet

我对 phpspreadsheet 有疑问。 我需要将数据传递给 php 文件,生成 excel 文件。 我可以用

        window.location.href='pagegeneratingexcel.php?parameter=parvalue';

在生成 excel 的页面中,我可以轻松检索 GET 变量。 但是我需要传递一些变量,或者 arrays,那么我应该使用 POST 来代替。 我试过 ajax

    postData = { parameter: "parvalue"};


    $.ajax({
        url : "pagegeneratingexcel.php",
        type: "POST",
        data : postData,
        dataType: "json",
        success:function(data){
            console.log(data);
        }
    })

但这给出了500 错误 我尝试生成一个动态表单并提交它......类似于:

let form = $(document.createElement('form'));
$(form).attr("action", "pagegeneratingexcel.php");
$(form).attr("method", "POST");
$(form).css("display", "none");
    
let input1 = $("<input>")
.attr("type", "text")
.attr("name", "parameter")
.val("parvalue");
$(form).append($(input1));
        
form.appendTo( document.body );
        
$(form).submit();

仍然没有办法:它给出了500 错误

问题似乎与 pagegeneratingexcel.php 文件中的这一行有关:

$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("TemplateExport.xlsx");

这就是它停止的地方:这条指令(不过,我的 excel 文件生成需要)似乎与任何类型的 POST 冲突,而一切都与 GET 完美配合:

window.location.href='pagegeneratingexcel.php?parameter=parvalue';

或 - 当没有数据传递时:

window.location.href='pagegeneratingexcel.php';

仅供参考 pagegeneratingexcel.php 类似于

require_once('vendor/autoload.php');
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\IOFactory;
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load("TemplateExport.xlsx"); 

$spreadsheet->setActiveSheetIndex(0);
$spreadsheet->getActiveSheet()->SetCellValue("A1", "MYVALUES");

$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="OUTPUTFILE.xlsx"');
$writer->save('php://output');

我已经自己整理了,无论如何感谢您的评论 CBroe。 问题是它看起来像 window.location.href 方法在结构上与 ajax POST 不同(我仍然忽略为什么)所以正确的方法是使用动态表单,这实际上是我的第二个选择,但我有忘记 JSON.stringify arrays 阻止它通过它们......

    let form = $(document.createElement('form'));
    $(form).attr("action", "pagegeneratingexcel.php");
    $(form).attr("method", "POST");
    $(form).css("display", "none");
    
    let input1 = $("<input>")
    .attr("type", "text")
    .attr("name", "parameter")
    .val("parvalue");
    $(form).append($(input1));
    

    let inputNomiCampiA = $("<input>")
   .attr("type", "text").attr("name", 
   "nomiCampiA")
   .val(JSON.stringify(nomiCampiA));  //this is the point
   $(form).append($(inputNomiCampiA));
    
    
   form.appendTo( document.body );
   $(form).submit();
   $(form).remove();

显然 pagegeneratingexcel.php 需要 json_decode arrays 才能将它们作为真正的 arrays

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM