javascript - AJAX POST 问题,变量为空,但在 echo 中显示

标签 javascript php mysql ajax

Ajax 发送 2 个日期变量,服务器接收但由于某种原因无法使用它们,就像它们是空的一样。 gettype 函数返回 NULL 但在 echo 中它们显示正确。

在发送之前检查了 js 变量 - 它们是正确的,网络日志也显示了正确的请求参数。这意味着我的ajax post请求由于某种原因无法正确接收?我已使用 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>&nbsp;
    <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, 'days'), moment()],
           'Last 30 Days': [moment().subtract(29, 'days'), moment()],
           'This Month': [moment().startOf('month'), moment().endOf('month')],
           'Last Month': [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, '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>

最佳答案

请删除内容类型

 $.post({
   url: '../public/export.php',
   data: { start: start,end: end },
   success: function() {
   }
  });

关于javascript - AJAX POST 问题,变量为空,但在 echo 中显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58771657/

相关文章:

MySQL Update 查询需要更多时间来更新表

mysql - 多个表之间的动态列名导入mySQL

javascript - 如何从 JavaScript/jQuery 逻辑中删除 HTML 代码

asp.net - 如何从代码隐藏文件中的asp.net用户控件注册(调用)jQuery函数?

javascript - Firefox 中的 Websockets 不适用于多个 HTTPS 页面

javascript - Vue.js:动态获取注册组件

php - 用户输入未存储在数据库中

PHP 设置 MySQL 套接字位置

php - Cron Job - 删除特定文件夹中的所有文件

php - Laravel:运行 phpunit 测试后删除了数据库表