2012-03-27 97 views
1

我有一些JQGrid应该导出为ex​​cel的数据。所以,我们编写了一个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 !!!!

回答

1

我认为如果您使用HTTP POST,则无法打开Excel。它的工作方式是使用您在URL中需要HTTP GET及编码参数:

window.location = "http://devmachine:9010/axis/StdPartSearchServlet?" + 
    $.param({someParamName: "someValue", anotherParam: 123}); 

在Web浏览器将打开返回的数据为PistonData.xlsContent-Disposition头中指定相对于应用程序的注册方式为application/vnd.ms-excel(请参阅Content-Type标题)。有关更多详细信息,请参阅the answer

如果需要防止从服务器返回的数据XLS不受控制缓存我建议你设置其他HTTP头"Cache-Control: max-age=0"或更好"Cache-Control: private, max-age=0"以防止缓存,而不对HTTP代理重新验证。有关其他信息,请参阅herehere

+0

但与get方法,我们将无法发送很多记录到服务器。对?在最坏的情况下,我需要发送500条记录进行服务。 – Dinesh 2012-03-27 11:22:31

+0

@Dinesh:你需要发送二进制数据流。通常,将'Content-Encoding'设置为'UTF-8'并发送'UTF-8'编码的'PistonData.xls'数据。所以我不明白你的意思是什么。 – Oleg 2012-03-27 11:32:22

+0

@Dinesh:我不确定它确实对你有帮助,但是在[答案](http://stackoverflow.com/a/9349688/315935)中,我发布了完整的C#代码,它使用Open XML SDK 2.0,生成xlsx服务器,并返回像我在我的答案中所述。 – Oleg 2012-03-27 11:35:34

0

如果你想使用jQuery下载文件,也许你应该看看这里:

http://www.filamentgroup.com/lab/jquery_plugin_for_requesting_ajax_like_file_downloads1

这有一个工作片断做你想要什么。

+0

我想将JQGrid内容导出到Excel中。 – Dinesh 2012-03-27 09:25:45

+0

如果是这样的话,上面提到的代码片段可能就是你要找的东西。 – Steve 2012-03-27 09:27:52

+0

应该是。但它并没有打开Excel或至少没有显示出接收结果的迹象。 – Dinesh 2012-03-27 09:51:41