Ajax发布发送服务器接收的2个日期变量,但是由于某些原因,它们无法使用,因为它们为空。 gettype函数返回NULL,但在回显中它们正确显示。
在发送前检查js变量-它们正确无误,并且网络日志还显示正确的请求参数。这意味着我的ajax发布请求由于某种原因未正确收到?我发送的日期与Postman的发布参数完全相同,并且服务器返回了正确的文件。
文件export.php
<?php
$host = "localhost";
$username = "root";
$password = "";
$dbname = "test";
$dsn = "mysql:host=$host;dbname=$dbname";
$options = array(
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
require '../PHPExcel-1.8/Classes/PHPExcel.php';
require '../PHPExcel-1.8/Classes/PHPExcel/Writer/Excel5.php';
$date1 = $_POST["start"];
$date2 = $_POST["end"];
//echo $date1;
try {
$connection = new PDO($dsn,$username,$password,$options);
$sql = sprintf("SELECT OrderDate,OrderPrice,Adress,Delivery FROM Orders WHERE OrderDate <='$date2' AND OrderDate >='$date1'");
$statement = $connection->prepare($sql);
$statement->execute();
} catch(PDOException $error) {
echo $sql . "<br>" . $error->getMessage();
};
$objPHPExcel = new PHPExcel();
$row = 1;
$objPHPExcel->getactiveSheet()->setCellValue('A'.$row,'OrderDate')
->setCellValue('B'.$row,'OrderPrice')
->setCellValue('C'.$row,'Adress')
->setCellValue('D'.$row,'Delivery');
$row++;
while ($rec = $statement->fetch(PDO::FETCH_ASSOC)) {
$objPHPExcel->getactiveSheet()->setCellValue('A'.$row,$rec['OrderDate'])
->setCellValue('B'.$row,$rec['OrderPrice'])
->setCellValue('C'.$row,$rec['Adress'])
->setCellValue('D'.$row,$rec['Delivery']);
$objPHPExcel->getactiveSheet()->getStyle('A'.$row)->getNumberFormat()->setformatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_XLSX15);
$row++;
};
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel,'Excel2007');
header("Content-type: " . $mimeType);
header('Content-Disposition: attachment; filename="file.xlsx"');
header("Content-Transfer-Encoding: binary");
$objWriter->save('php://output');
?>
文件create.php
<html>
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/jquery/latest/jquery.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/momentjs/latest/moment.min.js"></script>
<script type="text/javascript" src="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/daterangepicker/daterangepicker.css" />
<div id="reportrange" style="background: #fff; cursor: pointer; padding: 5px 10px; border: 1px solid #ccc; width: fit-content">
<i class="fa fa-calendar"></i>
<span></span> <i class="fa fa-caret-down"></i>
</div>
<script type="text/javascript">
$(function() {
var start = moment().subtract(29,'days');
var end = moment();
function cb(start,end) {
$('#reportrange span').html(start.format('MMMM D,YYYY') + ' - ' + end.format('MMMM D,YYYY'));
}
$('#reportrange').daterangepicker({
startDate: start,endDate: end,ranges: {
'Today': [moment(),moment()],'Yesterday': [moment().subtract(1,'days'),moment().subtract(1,'days')],'Last 7 Days': [moment().subtract(6,'Last 30 Days': [moment().subtract(29,'This Month': [moment().startOf('month'),moment().endOf('month')],'Last Month': [moment().subtract(1,'month').startOf('month'),'month').endOf('month')]
}
},cb);
cb(start,end);
});
</script>
<br>
<form id="form1" method="post" action="../public/export.php">
<button type="submit">Export</button>
<script>
$("#form1").submit(function s() {
let start = $('#reportrange').data('daterangepicker').startDate.format('YYYY-MM-DD');
let end = $('#reportrange').data('daterangepicker').endDate.format('YYYY-MM-DD');
console.log(start,end);
$.post({
url: '../public/export.php',data: { start: start,end: end },success: function() {/* //another way for receive file
fetch('http://localhost/1/public/export.php')
.then(resp => resp.blob())
.then(blob => {
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.style.display = 'none';
a.href = url;
a.download = $('#reportrange').data('daterangepicker').endDate.format('YYYY-MM-DD') + '.xlsx';
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
})
.catch(() => alert('error'));*/
},error: function(jqXHR,textStatus,errorThrown){
alert(textStatus,errorThrown);
}
});
});
</script>
</form>
</html>