2013-03-22 2 views
0

사용자가 iCal 형식의 캘린더 항목을 다운로드 할 수있는 HTML5 앱을 만들었습니다. 이 iCals는 PHP를 사용하여 생성됩니다. 나의 접근 방식은 PHP를 사용하여 iCal 파일을 생성하고 웹 서버의 하드 디스크에 저장하는 것입니다. 그런 다음이 파일의 URL을 window.open() 명령을 사용하여 열 수 있도록 프런트 엔드 (JavaScript)로 전달합니다.사용자에게 공개 할 파일 제공

이 접근법은 점점 더 많은 파일이 하드 디스크에 생성된다는 단점이 있습니다. PHP iCal 생성기가 보낸 응답에 특정 헤더를 추가하여 다른 방법이 있어야한다는 것을 이해했습니다. 사실입니까?

나는이 헤더를 사용하여 시도 :

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

직접 PHP 생성 파일을 호출, iCal의 파일이 제대로 열리지의 브라우저에 표시됩니다. 그러나 HTML5 앱에서 AJAX를 사용하여이 PHP 파일을 호출하면 아무 일도 발생하지 않습니다.

내가 뭘 잘못하고 있니?

건배

답변

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을 생성하고 이전에 지정한 헤더로 돌아갑니다.

+0

안녕 매트, 설명하는 첫 번째 접근 방식은 웹 서버에 두 개의 백엔드 호출과 ical 저장소를 생성하는 것입니다. 맞습니까? 따라서 나는 두 번째 것을 선호합니다. php에도 필요한 매개 변수를 전달할 수 있습니까? 방법? – AntonSack

+1

@AntonSack은 그렇지 않습니다. 첫 번째 방법은 서버에 iCal 파일을 생성하고 새 iCal 파일의 URL을 검색 한 다음 해당 URL로 무언가를하는 것은 사용자의 몫입니다. 나는 가장 유연한 느낌을주는 하나의 접근 방식을 갖기 위해 나의 대답을 업데이트했다. 또한 PHP가 GET을 통해 액세스 할 수있는 더미 매개 변수를 추가했습니다. –

+0

매트, 당신은 내 하루를 보냈습니다! 이것은 내가 찾고 있었던 바로 그 것이다! 엄청 고마워. 안타깝게도 내 평판은 당신의 대답에 투표하기에는 너무 낮습니다. : ( – AntonSack

관련 문제