我正在尝试为我的活动生成Outlook事件文件,当有人通过按页面上的链接请求时,它会动态执行。
这是我到目前为止所得到的,但我无法找到如何让浏览器下载返回的内容。
如果我通过_GET发送所有内容,我知道如何才能做到这一点,但我更愿意通过_POST来实现,因此我会沿着这条路走下去......
有什么想法? 谢谢!
HTML / Javascript
<script>
$(function() {
$(".button").click(function() {
// validate and process form
// first hide any error messages
var start = $("input#start").val();
var end = $("input#end").val();
var dataString = 'start='+ start + '&end=' + end;
$.ajax({
type: "POST",
url: "/calendar.php",
data: dataString,
success: function(data) {
//Need to return the file contents somehow!
}
});
return false;
});
});
</script>
<form name="calendar" method="post" action="">
<input type="hidden" name="start" id="start" value="<?php echo $start; ?>" />
<input type="hidden" name="end" id="end" value="<?php echo $end; ?>" />
<input type="submit" name="submit" class="button" id="submit_btn" value="Outlook" />
</fieldset>
</form>
PHP文件
<?php
if (isset($_POST['start'])) {
$start = $_POST['start'];
$end = $_POST['end'];
$c = header("Content-Type: text/Calendar");
$c .= header("Content-Disposition: inline; filename=calendar.ics");
$c .= "BEGIN:VCALENDAR\n";
$c .= "VERSION:2.0\n";
$c .= "PRODID:-//xxxyyyy//NONSGML //EN\n";
$c .= "METHOD:REQUEST\n"; // requied by Outlook
$c .= "BEGIN:VEVENT\n";
$c .= "UID:". $start . $end ."-" . "-xxxxyyyy.com\n"; // required by Outlook
$c .= "DTSTAMP:".date('Ymd').'T'.date('His')."\n"; // required by Outlook
$c .= "DTSTART:20080413T000000\n";
$c .= "SUMMARY:" . "\n";
$c .= "DESCRIPTION:" . "\n";
$c .= "END:VEVENT\n";
$c .= "END:VCALENDAR\n";
echo $c;
} else {
echo "Sorry you can't access this page directly";
}
?>
答案 0 :(得分:1)
PHP文件的输出将被放入成功回调中的“data”变量中。
此外,虽然我们在这里,你也可以快捷一些事情。您可以使用对象,而不是连接字符串以生成dataString(并希望没有人在其中放置=或&amp;),您可以使用对象:
dataObj = { start : start, end : end };
然后你只需将它传递给.ajax
答案 1 :(得分:0)
因为在ajax请求中我没有找到任何方法来处理重定向头,所以我在Ajax成功回调中使用了window.location代码来下载动作url。在你的情况下,除了显示一些进展,他们不应该需要发送ajax请求。所以你可以直接执行window.location ='calendar.php?start ='+ start +'&amp; end ='+ end;。
或者,如果您确定只希望通过POST执行它,请使用直接Form Post而不是使用Ajax。
答案 2 :(得分:0)
请检查以下代码提示。这可能对你有帮助..
type: "POST",
data: ({"start" : <?php echo $start; ?> , "end" : <?php echo $end; ?>}) ,
success: function() {
//Do something
}
});