duanqi5333 2010-03-04 15:44
浏览 77

JQuery - 通过AJAX调用将变量传递给PHP脚本,然后显示文件

I'm trying to generate Outlook event files for my events, doing so on the fly as and when someone requests it by pressing a link on the page.

Here's what i've got so far, but I can't find out how to get the browser to download the content which is returned.

I know how I could do this if I sent everything via _GET, but I'd prefer to do it via _POST, hence I'm going down this route..

Any thoughts? Thanks!

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 File

<?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
";
    $c .= "VERSION:2.0
";
    $c .= "PRODID:-//xxxyyyy//NONSGML //EN
";
    $c .= "METHOD:REQUEST
"; // requied by Outlook
    $c .= "BEGIN:VEVENT
";
    $c .= "UID:". $start . $end ."-" . "-xxxxyyyy.com
"; // required by Outlook
    $c .= "DTSTAMP:".date('Ymd').'T'.date('His')."
"; // required by Outlook
    $c .= "DTSTART:20080413T000000
"; 
    $c .= "SUMMARY:" . "
";
    $c .= "DESCRIPTION:" .  "
";
    $c .= "END:VEVENT
";
    $c .= "END:VCALENDAR
";
    echo $c;        
} else {
    echo "Sorry you can't access this page directly";   
}
?>
  • 写回答

3条回答

  • dongza6247 2010-03-04 15:47
    关注

    The output of the PHP file will be put into the "data" variable in your success callback.

    Also, while we're here, you can also shortcut a few things. Instead of concatenating strings to generate the dataString (and hope that no one puts an = or & in there), you can use objects:

    dataObj = { start : start, end : end };
    

    And then you just pass that to the data property of .ajax

    评论

报告相同问题?

悬赏问题

  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类