【问题标题】:AJAX POST problem, variables empty, but showing in echoAJAX POST 问题,变量为空,但在 echo 中显示
【发布时间】:2019-11-08 17:59:41
【问题描述】:

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

发送前检查 js 变量 - 它们正确,网络日志也显示正确的请求参数。这意味着我的 ajax 发布请求由于某种原因没有正确接收?我已经使用 Postman 发送了具有完全相同的发布参数的日期,并且服务器返回了正确的文件。

文件导出.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');
?>

文件创建.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>

【问题讨论】:

  • 嗨!如果您可以回显变量并验证它们是否存在,那么问题不在于服务器没有接收到它们。可能是别的东西,比如你的 SQL 什么的。
  • sql 应该是正确的,因为当我发送邮递员请求时它可以工作

标签: javascript php mysql ajax


【解决方案1】:

请删除 contentType

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

【讨论】:

  • 已移除但问题依旧
猜你喜欢
  • 1970-01-01
  • 2021-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-03
  • 1970-01-01
  • 2010-12-11
  • 1970-01-01
相关资源
最近更新 更多