我使用 jquery 将 get 查询设置为 php 脚本,该脚本然后查询数据库并写入屏幕,但我无法让它触发下载,即使使用标题也是如此。
步骤如下:
创建用户单击以下载数据的链接
javascript将查询参数发送到php
php查询数据库并写入文件
客户端下载文件
但我无法让第 4 步发生。
第 1 步:(这是一个表对象,其中还包含参数:
d3.select("#some-div").append('a")
.attr("href", "javascript: void(0)")
.on("click", function() { this.saveAsCSV() };
第 2 步:用于查询的 Javascript 文件:
var saveAsCSV = function(params) {
var tmp_params = $.extend({}, params);
tmp_params['State'] = "NM";
$.get('php/get_data.php', tmp_params);
}
php返回查询:
...
header("Content-type: application/text-csv");
header("Content-Disposition: attachment; filename=query_result.csv");
while($row = $result->fetchArray() {
print "$row";
}
...
它工作正常,因为它可以正确查询并将在 javascript 函数中打印数据(因此,如果我将其添加到 get return 函数中,它会将其打印到 console.log ),但我不知道我应该做些什么不同让它直接下载它。
我尝试过的一件事是对 params 对象执行以下操作:
var param_string = encodeURIComponent(JSON.stringify(params));
location.href = 'http://www.mysite.com"+param_string;
但这两者都会使用户离开页面并且无法下载数据。
编辑:我应该澄清 php 文件确实以 csv 格式输出查询。问题似乎是使用 $.get() 函数不会触发下载,无论 php 标头如何。也许我只需要提供一个带有 URL 地址中参数的简单链接,但我不确定如何将 javascript 对象转换为 URL 格式,以便 php 脚本可以解释它。