Принудительная загрузка файла ics, созданного с помощью php с отправкой данных POST из AJAX запроса, полученного из пользовательского ввода - PullRequest
0 голосов
/ 18 января 2020

Я пытаюсь создать загружаемый .ics-файл из пользовательского ввода.

Проблема, с которой я борюсь, это часть загрузки.

Код:

jQuery

function sendOnSuccess(){
    var name = jQuery('.member.selected .name').text();
    //day - only the number
    var day = jQuery('.member.selected .calendar .date').text().replace(/\D+/g, '');
    var month = jQuery('.member.selected .calendar .month').text();
    var year = jQuery('.member.selected .calendar .year').text();
    var time = jQuery('.member.selected .slots .selected').text();
    //get everything before :
    var hour = jQuery('.member.selected .slots .selected').text().substring(0, time.indexOf(":"));
    //get everything after :
    var minutes = jQuery('.member.selected .slots .selected').text().split(":").pop();
    var number = jQuery('.member.selected .form input[name="tel"').val();

    jQuery.ajax({
          url: 'download_ics.php',
          type: 'POST',
          data: {
                     name : name,
                     day : day,
                     month : month,
                     year : year,
                     time : time,
                     hour : hour,
                     minutes : minutes,
                     number : number
                 },
          success: function(output){
           // output works
          }
        });
}

download_ics. php

<?php

require_once("ICS.php");

header('Content-Type: text/calendar; charset=utf-8');
header('Content-Disposition: attachment; filename.ics');

$name = $_POST["name"];
$day = $_POST["day"];
$month = $_POST["month"];
$year = $_POST["year"];
$time = $_POST["time"];
$minutes = $_POST["minutes"];
$hour = $_POST["hour"];
$number = $_POST["number"];

$date = strtotime("$year-$month-$day $hour:$minute$timeofday");

$ics = new ICS(array(
  'description' => $name,
  'dtstart' => $date,
  'dtend' => $date . '+ 30 minutes'
));

echo $ics->to_string();

if($number){
  //die(' Success');
  die();
}else{
  die("failed to create");
}

Все вызывается этой строкой html:

<a class="download" href="#" target="_blank" onclick="sendOnSuccess();">Download .ics</a>

Так что все работает нормально - просто я не могу понять, как загрузить файл после его создания. Все, что я получаю, это только содержимое файла.

Вдохновленный этим проектом: https://github.com/jakebellacera/ics

1 Ответ

1 голос
/ 21 января 2020

Не могли бы вы показать нам ICS. php? Есть ли где-нибудь документация?

Я бы начал с изменения

header('Content-Disposition: attachment; filename.ics');

на

header('Content-Disposition: attachment; filename="filename.ics"');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...