JQuery Excel导出问题

JQuery Excel导出问题,jquery,servlets,jqgrid,jsonp,export-to-excel,Jquery,Servlets,Jqgrid,Jsonp,Export To Excel,我有一些来自JQGrid的数据,应该导出到excel。因此,我们编写了一个Javaservlet,将数据写入excel并发送回。在客户端,我们通过发送JSON数据来使用AJAX JSONP请求。我能够点击servlet并将创建的excel发送回客户端。但我无法看到excel或客户端的任何输出 当我使用Fiddler并观察http调用时,我发现应用程序收到了结果。但它仍然没有显示结果 这是我收到的结果标题 HTTP/1.1 200 OK Server: Apache-Coyote/1.1 Cont

我有一些来自JQGrid的数据,应该导出到excel。因此,我们编写了一个Javaservlet,将数据写入excel并发送回。在客户端,我们通过发送JSON数据来使用AJAX JSONP请求。我能够点击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 根据奥列格的建议,我想出了解决这个问题的办法

这是我的密码:

    <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();

$('#columnNames').val(colModStr);
$('#partId').val(currentPartID);
$('#data').val(dataStr);
var urlForExport=”http://devmachine:9010/axis/SPSServlet";        
$('frmExcelExport').attr(“方法”、“post”);
$('#frmExcelExport').attr(“操作”,urlForExport);
$('frmExcelExport')。提交();
而且效果非常好。
多谢奥列格

如果您试图使用jquery下载该文件,也许您应该查看以下内容:


这有一个可供您使用的代码段。

如果您正试图使用jquery下载该文件,也许您应该查看以下内容:


这有一个工作代码段可以完成您想要的操作。

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

window.location=”http://devmachine:9010/axis/StdPartSearchServlet?" +
$.param({someParamName:“someValue”,另一个参数:123});
web浏览器将以
内容处理
标题中指定的
PistonData.xls
的方式打开返回的数据,该标题与注册为
应用程序/vnd.ms excel的应用程序有关(请参见
内容类型
标题)。有关更多详细信息,请参阅


如果您需要防止对从服务器返回的XLS数据进行不受控制的缓存,我建议您设置额外的HTTP头
“缓存控制:最大年龄=0”
或更好的
“缓存控制:专用,最大年龄=0”
,以防止在不重新验证HTTP代理的情况下进行缓存。有关更多信息,请参见。

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

window.location=”http://devmachine:9010/axis/StdPartSearchServlet?" +
$.param({someParamName:“someValue”,另一个参数:123});
web浏览器将以
内容处理
标题中指定的
PistonData.xls
的方式打开返回的数据,该标题与注册为
应用程序/vnd.ms excel的应用程序有关(请参见
内容类型
标题)。有关更多详细信息,请参阅



如果您需要防止对从服务器返回的XLS数据进行不受控制的缓存,我建议您设置额外的HTTP头
“缓存控制:最大年龄=0”
或更好的
“缓存控制:专用,最大年龄=0”
,以防止在不重新验证HTTP代理的情况下进行缓存。有关更多信息,请参见。

我想将JQGrid内容导出到Excel。如果是这样,那么上面提到的代码段很可能就是您要查找的代码段。它应该是。但是它没有打开excel,或者至少没有显示收到结果的迹象。这里有一个线程说你不能将POST与JSONP一起使用。我想将JQGrid内容导出到excel。如果是这样的话,上面提到的代码片段很可能就是你要找的。应该是这样的。但是它没有打开excel,或者至少没有显示收到结果的迹象。这里有一个线程说,您不能将POST与JSONP一起使用,但是使用get方法,我们将无法向服务器发送太多记录。正确的?在最坏的情况下,我需要向服务发送500条记录。@Dinesh:您需要发送二进制数据流。通常一组
内容编码
UTF-8
并发送
PistonData.xls
UTF-8
中编码的数据。所以我不明白你说的记录是什么意思。@Dinesh:我不确定它是否真的对你有帮助,但在年,我发布了完整的C代码,它使用OpenXMLSDK2.0,在服务器上生成xlsx,并按照我在回答中所述返回。从客户端到服务器,我需要发送一些记录。对于某些请求,我可能需要发送2条记录,对于某些请求,我可能需要发送5000条记录。我们可以使用GET使用这么多记录来访问excel导出servlet吗?这可能会起作用。您可以在不同的目标窗口中提交表单。有关问题和答案,请参见示例。但是使用get方法,我们将无法向服务器发送太多记录。正确的?在最坏的情况下,我需要向服务发送500条记录。@Dinesh:您需要发送二进制数据流。通常一组
内容编码
UTF-8
并发送
PistonData.xls
UTF-8
中编码的数据。所以我不明白你说的记录是什么意思。@Dinesh:我不确定它是否真的对你有帮助,但在年,我发布了完整的C代码,它使用OpenXMLSDK2.0,在服务器上生成xlsx,并按照我在回答中所述返回。从客户端到服务器,我需要发送一些记录。对于某些请求,我可能需要发送2条记录,对于某些请求,我可能需要发送5000条记录。我们可以使用GET使用这么多记录来访问excel导出servlet吗?这可能会起作用。您可以在不同的目标窗口中提交表单。有关问题和答案,请参见示例。