0

ユーザーが iCal 形式でカレンダー エントリをダウンロードできるようにする HTML5 アプリを作成しました。これらの iCal は、PHP を使用して作成されます。今日までの私のアプローチは、PHP を使用して iCal ファイルを生成し、それを Web サーバーのハードディスクに書き込むことでした。その後、window.open()コマンドを使用して開くことができるように、このファイルへの URL をフロントエンド (JavaScript) に渡します。

このアプローチには、ハードディスク上にますます多くのファイルが作成されるという欠点があります。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 に答える