使用 jQuery 使用 AJAX 发送 Excel 数据
Posted
技术标签:
【中文标题】使用 jQuery 使用 AJAX 发送 Excel 数据【英文标题】:Use jQuery to send Excel data using AJAX 【发布时间】:2010-09-14 01:41:35 【问题描述】:我有以下从数据库中提取数据的函数。 ajax 调用工作正常。如何将成功函数中的制表符分隔数据发送给用户?将联系类型设置为“application/vnd.ms-excel”不起作用。成功警报显示格式正确的数据。
function SendToExcel()
$.ajax(
type: "GET",
url: "/Search.aspx",
contentType: "application/vnd.ms-excel",
dataType: "text",
data: "id: '" + "asdf" + "'",
success: function(data)
alert(data);
,
error: function (jqXHR, textStatus, errorThrown)
alert(jqXHR.responseText);
);
我不想在浏览器中显示数据——我想将其发送到 Excel。
编辑:我找到了一种方法来做我想做的事。我没有将用户重定向到会提示他们保存/打开 Excel 文件的新页面,而是在隐藏的 iframe 中打开了该页面。这样,用户单击一个按钮,就会提示他们保存/打开一个 Excel 文件。没有页面重定向。是阿贾克斯吗?不,但它解决了我遇到的真正问题。
这是我在单击按钮时调用的函数:
function SendToExcel()
var dataString = 'type=excel' +
'&Number=' + $('#txtNumber').val() +
'&Reference=' + $('#txtReference').val()
$("#sltCTPick option").each(function (i)
dataString = dataString + '&Columns=' + this.value;
);
top.iExcelHelper.location.href = "/Reports/JobSearchResults.aspx?" + dataString;;
【问题讨论】:
为什么这是一个不好的问题?为什么这被否决了? 它被否决了,因为很可能每个人都认为来自 AJAX 的请求是一种糟糕的方法,但使用隐藏的 iframe 可能会出现下载对话框。尽管每个浏览器都会得到不同的结果。我记得 IE 是一个有问题的人。但隐藏的 iframe 方法有效 - 我可以确认。 【参考方案1】:AJAX 是……错误的选择。将用户重定向到服务器资源,该资源将使用正确的 MIME 类型向下发送数据,并让浏览器弄清楚如何处理它。
【讨论】:
@Shog9 请详细说明错误选择以及(技术)原因。【参考方案2】:在 html 中,我有一个带有串行输入元素的表单和一个调用 javascript 函数的按钮 onclick="exportExcel();
然后在 JavaScript 文件中:
function exportExcel()
var inputs = $("#myForm").serialize();
var url = '/ajaxresponse.php?select=exportExcel&'+inputs;
location.href = url;
最后是一个响应某事的数据透视文件
PHP 代码:
case 'exportExcel':
ob_end_clean();
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment;
filename=exportFile.xls");
echo $html->List($bd->ResultSet($_GET));
$html是处理html的对象,$bd是从Database返回数据的对象 发送您自己的 html 表格或您想要的任何内容。
【讨论】:
【参考方案3】:由于它使用 JavaScript,AJAX 受到 JavaScript 设计限制的约束,其中包括与客户端机器上的其他进程交互。在这种情况下,这是一件好事;您不希望网站能够自动加载包含恶意宏的 Excel 文档。
如果要在浏览器中显示数据,可以使用AJAX;否则,您只需要提供一个 Excel 文档的链接,然后让浏览器的常规下载处理功能来确定要做什么。
【讨论】:
【参考方案4】:您可能不想使用 javascript 执行此操作。
我认为您想要做的是创建一个我的类型为 application/csv 的响应页面,然后将用户重定向到该页面。我可能会做一个 window.open() 因为用户不会丢失他们当前所在的页面。
【讨论】:
以上是关于使用 jQuery 使用 AJAX 发送 Excel 数据的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery $.ajax 将请求参数数组发送到 servlet?