0

我创建了一个 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 文件时,什么也没有发生。

我究竟做错了什么?

干杯

4

1 回答 1

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 并返回您之前指定的标头。

于 2013-03-22T11:08:32.517 回答