[英]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.