AJAX POST проблема, переменные пустые, но отображаются в эхо - PullRequest
0 голосов
/ 08 ноября 2019

Ajax отправляет 2 переменные даты, которые получает сервер, но по какой-то причине не может работать с ними, так как они пусты. Функция gettype возвращает NULL, но в echo они отображаются правильно.

Проверенные переменные js перед отправкой - они исправляются, а также в журнале сети отображаются правильные параметры запроса. Это означает, что мой ajax post запрос по какой-то причине не правильно получил? Я отправил даты с точно такими же параметрами поста, почтальон и сервер вернули правильный файл.

файл 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>

1 Ответ

0 голосов
/ 08 ноября 2019

пожалуйста, удалите contentType

 $.post({
   url: '../public/export.php',
   data: { start: start,end: end },
   success: function() {
   }
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...