繁体   English   中英

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

[英]JQuery - Pass variables to PHP script via AJAX call and then display file

我正在尝试为我的事件生成Outlook事件文件,并在有人请求时通过按页面上的链接即时生成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";   
}
?>

PHP文件的输出将被放入成功回调中的“ data”变量中。

另外,当我们在这里时,您还可以简化一些操作。 可以使用对象来代替串联字符串来生成dataString(并希望没有人在其中放置=或&)。

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

然后将其传递给.ajax的data属性

就像在ajax请求中一样,我找不到任何方法来处理重定向头,因此我在Ajax成功回调中使用window.location代码来下载操作URL。 在您的情况下,除了显示一些进度外,他们不应该需要发送ajax请求。 因此,您可以直接执行window.location ='calendar.php?start ='+ start +'&end ='+ end;。

另外,如果您确定希望通过POST执行的唯一方式,请使用直接表单发布而不是使用Ajax。

请检查以下代码提示。 这可能对您有帮助。

type: "POST",

data: ({"start" : <?php echo $start; ?> , "end" : <?php echo $end; ?>}) ,
success: function() {
                    //Do something
        }
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM