我正在尝试将一个变量从一个PHP页面传递到另一个PHP页面,这将触发Excel下载。但是,我不知道如何在传递变量的同时仍然拥有下载触发器。我知道创建Excel文件的PHP页面不能传递任何变量,否则下载将不会触发。
例如,我想执行以下操作(非常简单的示例):
variable.php
<?php
$date = '2012-02-15';
echo '<input type="text" id="date" value="'.$date.'"/>';
echo '<span onclick="excelDownload()">Click</span>';
?>passing.js
function excelDownload(str)
{
Ajax...
var date = document.getElementById('date').value;
var queryString = "?date=" + date;
xmlhttp.open("GET", "excel.php" + queryString, true);
Ajax....
}excel.php
<?php
Connect to database...
$date = $_GET['date'];
$file = "Names: ";
$result = mysql_query("SELECT * FROM Something WHERE date_field = '$date'");
$data = mysql_fetch_array($result);
$file.= $data['names']." ";
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=names.xls");
header("Pragma: no-cache");
header("Expires: 0");
print $file;
?>不幸的是,$_GETdate变量导致excel.php无法下载。我已经能够在excel.php页面中编写静态MySql查询,所以我不需要传递任何变量。然而,我现在需要创建动态的excel下载,但我在php方面还不够强大,无法确定我的选择。顺便说一下,我使用Ajax,没有使用“提交”。这会是个问题吗?
发布于 2012-02-16 14:27:48
我发现了我的问题,并想分享我的发现来结束这个问题。基本上,我应该在我的问题中更详细。我的Ajax函数需要进行一些调整,以便传递变量并允许头文件触发下载。
我在Ajax函数中使用了以下内容:
Ajax...
{
if (xmlhttp.readyState == 4)
{
//nothing to allow download to trigger
}
}
var date = document.getElementById('date').value;
var queryString = "?date=" + date;
xmlhttp.open("GET", "excel.php" + queryString, true):
xmlhttp.send(null);但是,我应该使用下面的代码:
Ajax...
{
if (xmlhttp.readyState == 4)
{
window.location = "excel.php" + queryString;
}
}
var date = document.getElementById('date').value;
var queryString = "?date=" + date;
xmlhttp.open("GET", "excel.php" + queryString, true):
xmlhttp.send(null);虽然我认为我的问题与header()之前的输出有关,但真正的问题是传递变量。
https://stackoverflow.com/questions/9292546
复制相似问题