JQuery Excel导出问题
我有一些JQGrid应该导出为excel的数据。所以,我们编写了一个java servlet来将数据写入excel并发送回去。从客户端,我们通过发送JSON数据来使用AJAX JSONP请求。我能够击中servlet和servlet将创建的excel发送回客户端。但我无法看到客户端的excel或任何类型的输出。JQuery Excel导出问题
当我使用Fiddler并观察http调用时,发现应用程序收到结果。但仍然没有显示出结果。
这是我的结果标题,我收到了。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Disposition: attachment; filename=PistonData.xls
Content-Type: application/vnd.ms-excel
Content-Length: 6144
Date: Tue, 27 Mar 2012 08:49:04 GMT
如何使用JQuery打开Excel的结果?有人可以请建议我一种方法来解决这个问题。
更新#1 忘了包括要求
$.ajax({
type: "POST",
dataType: "jsonp",
contentType:'application/vnd.ms-excel',
url: "http://devmachine:9010/axis/SPSServlet",
data: param,
success: function (dataToSend) {
alert(dataToSend);
}
});
更新#2 按照Oleg的建议,我制定了一个解决这个问题。
这里是我的代码:
<form id="frmExcelExport" style="display:none;">
<input type=hidden id="partId" name="partId" />
<input type=hidden id="columnNames" name="columnNames" />
<input type=hidden id="data" name="data" />
</form>
$('#columnNames').val(colModStr);
$('#partId').val(currentPartID);
$('#data').val(dataStr);
var urlForExport = "http://devmachine:9010/axis/SPSServlet";
$('#frmExcelExport').attr("method", "post");
$('#frmExcelExport').attr("action", urlForExport);
$('#frmExcelExport').submit();
,它是工作非常好。 非常感谢Oleg !!!!
我认为如果您使用HTTP POST
,则无法打开Excel。它的工作方式是使用您在URL中需要HTTP GET
及编码参数:
window.location = "http://devmachine:9010/axis/StdPartSearchServlet?" +
$.param({someParamName: "someValue", anotherParam: 123});
在Web浏览器将打开返回的数据为PistonData.xls
在Content-Disposition
头中指定相对于应用程序的注册方式为application/vnd.ms-excel
(请参阅Content-Type
标题)。有关更多详细信息,请参阅the answer。
如果需要防止从服务器返回的数据XLS不受控制缓存我建议你设置其他HTTP头"Cache-Control: max-age=0"
或更好"Cache-Control: private, max-age=0"
以防止缓存,而不对HTTP代理重新验证。有关其他信息,请参阅here,here。
如果你想使用jQuery下载文件,也许你应该看看这里:
http://www.filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads1
这有一个工作片断做你想要什么。
但与get方法,我们将无法发送很多记录到服务器。对?在最坏的情况下,我需要发送500条记录进行服务。 – Dinesh 2012-03-27 11:22:31
@Dinesh:你需要发送二进制数据流。通常,将'Content-Encoding'设置为'UTF-8'并发送'UTF-8'编码的'PistonData.xls'数据。所以我不明白你的意思是什么。 – Oleg 2012-03-27 11:32:22
@Dinesh:我不确定它确实对你有帮助,但是在[答案](http://stackoverflow.com/a/9349688/315935)中,我发布了完整的C#代码,它使用Open XML SDK 2.0,生成xlsx服务器,并返回像我在我的答案中所述。 – Oleg 2012-03-27 11:35:34