【问题标题】:JQuery Excel export issueJQuery Excel导出问题
【发布时间】:2012-04-10 19:02:59
【问题描述】:

我有一些来自 JQGrid 的数据应该导出到 excel 中。因此,我们编写了一个 java servlet 来将数据写入 excel 并将其发送回。在客户端,我们通过发送 JSON 数据来使用 AJAX JSONP 请求。我能够点击 servlet 和 servlet 将创建的 excel 发送回客户端。但我无法从客户端看到 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();

而且效果很好。 非常感谢奥列格!!!!

【问题讨论】:

    标签: jquery servlets jqgrid jsonp export-to-excel


    【解决方案1】:

    我认为如果您使用 HTTP POST,您将无法打开 Excel。可行的方法是使用 HTTP GET 并在 URL 中编码您需要的参数:

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

    对于为application/vnd.ms-excel 注册的应用程序,Web 浏览器将以Content-Disposition 标头中指定的PistonData.xls 的方式打开返回的数据(请参阅Content-Type 标头)。详情请见the answer

    如果您需要防止对从服务器返回的 XLS 数据进行不受控制的缓存,我建议您设置额外的 HTTP 标头 "Cache-Control: max-age=0" 或更好的 "Cache-Control: private, max-age=0" 以防止在未重新验证 HTTP 代理的情况下进行缓存。请参阅herehere 了解更多信息。

    【讨论】:

    • 但是使用 get 方法,我们将无法向服务器发送太多记录。正确的?在最坏的情况下,我需要发送 500 条记录进行服务。
    • @Dinesh:你需要发送二进制数据流。通常一组Content-EncodingUTF-8 并发送PistonData.xls 编码在UTF-8 中的数据。所以我不明白你的意思是什么记录。
    • @Dinesh:我不确定它是否真的对你有帮助,但在the answer 我发布了使用 Open XML SDK 2.0 的完整 C# 代码,在服务器上生成 xlsx 并返回,就像我在我的回答。
    • 从客户端到服务器,我需要发送一些记录。对于某些请求,我可能需要发送 2 条记录,对于某些请求,我可能需要发送 5000 条记录。我们可以使用 GET 来访问包含这么多记录的 excel 导出 servlet 吗?
    • 这可能行得通。您可以在不同的目标窗口中提交表单。有关问题和答案,请参阅here
    【解决方案2】:

    如果您尝试使用 jquery 下载文件,也许您应该看这里:

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

    这有一个有效的 sn-p 来做你想做的事。

    【讨论】:

    • 我想将 JQGrid 内容导出到 Excel。
    • 如果是这样的话,上面提到的代码 sn-p 很可能就是你要找的。​​span>
    • 应该是。但它没有打开 excel,或者至少没有显示收到结果的迹象。
    • 这里有一个线程说你不能使用 POST 和 JSONP stackoverflow.com/q/2699277/1211981
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 2021-05-25
    • 2023-03-12
    相关资源
    最近更新 更多