【问题标题】:Offer ical file to user to be opened向用户提供 ical 文件以打开
【发布时间】:2013-03-22 20:06:14
【问题描述】:

我创建了一个 HTML5 应用程序,允许用户下载 iCal 格式的日历条目。这些 iCal 是使用 PHP 创建的。直到今天,我的方法是使用 PHP 生成 iCal 文件并将其写入 Web 服务器上的硬盘。之后,我将此文件的 URL 传递给前端 (JavaScript),以便可以使用 window.open() 命令打开它。

这种方法的缺点是在硬盘上创建的文件越来越多。我知道必须有另一种方法,即在 PHP iCal 生成器发送的响应中添加特定的标头。这是真的吗?

我尝试使用这些标题:

header('Content-type: application/force-download; charset=utf-8'); 
header('Content-Disposition: attachment; filename="eintrag.ics"');

直接调用PHP生成文件时,iCal文件正确显示在浏览器中以供打开。但是当我在我的 HTML5 应用程序中使用 AJAX 调用这个 PHP 文件时,什么也没有发生。

我做错了什么?

干杯

【问题讨论】:

    标签: php javascript ajax icalendar


    【解决方案1】:

    AJAX 是用户浏览器和服务器之间的“幕后”通信。通过 AJAX 请求数据不会自动显示给用户,它只是将其传递给浏览器。然后,您负责处理该数据(在页面上显示、发送给用户等)。

    在不了解您的架构的情况下,您可以尝试类似 (jQuery):

    $.get('ical/', { param1: 'val', param2: 'val'}, function(response) {
        // we can let the user decide to download the new ical
        message = 'Your iCal is ready, click <a href="' + response.icalPath + '">here to download it';
        $('.message').html(message);
    
        // or force the user's browser to download the ical file directly
        window.location.href = response.icalPath;
    });
    

    PHP:

    // beep boop ... generate iCal
    
    // return the new iCal path to the HTML5 app
    return json_encode(array('success' => true, 'icalPath' => 'tmp/icals/generated.ical'));
    

    如果您真的不想将 iCal 存储在磁盘上,那么您可以使用不太灵活的解决方案,例如:

    window.location.href = '/ical?param=1&param=2';
    

    PHP 会读取 GET 参数,在内存中生成 iCal 并返回您之前指定的标头。

    【讨论】:

    • 嗨,马特,您描述的第一种方法会导致两个后端调用和 ical 在 Web 服务器上的存储,对吗?因此,我更喜欢第二个。我也可以将必要的参数传递给 php 吗?怎么样?
    • @AntonSack 不是真的。第一种方法要求服务器生成一个 iCal 文件,检索新 iCal 文件的 URL,然后由您来处理该 URL。我已经更新了我的答案,以采用我认为提供最大灵活性的单一方法。我还添加了一些 PHP 可以通过 GET 访问的虚拟参数。
    • 马特,你成就了我的一天!这正是我想要的!万分感谢。不幸的是,我的声誉太低,无法投票给您的答案.... :(
    • @AntonSack 不用担心安东。你不能投票,但你当然可以接受我的回答,这会给我们both带来声誉。将鼠标移到投票编号下方,然后单击对勾图标。
    猜你喜欢
    • 2014-06-09
    • 2017-10-20
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    相关资源
    最近更新 更多