Jquery jqGrid导出到CSV-Post而不是Get

Jquery jqGrid导出到CSV-Post而不是Get,jquery,jqgrid,Jquery,Jqgrid,我有一个jqGrid,它使用Post发送请求。我有一个php函数,当给定jqGrid搜索和排序设置时,它可以返回一个CSV文件。另外,我还设置了一个外部按钮,可以调用exportExcel,试图调用php函数并检索CSV 问题是,excelExport正在使用GET发送数据,我仍然需要将其发送到POST。我查看了代码,并尝试了几种方法设置excelExport通过POST发送请求,但没有成功 所以,问题是:有没有一种方法可以让excelExport使用POST,或者有没有一种简单的方法可以让我发

我有一个jqGrid,它使用Post发送请求。我有一个php函数,当给定jqGrid搜索和排序设置时,它可以返回一个CSV文件。另外,我还设置了一个外部按钮,可以调用exportExcel,试图调用php函数并检索CSV

问题是,excelExport正在使用GET发送数据,我仍然需要将其发送到POST。我查看了代码,并尝试了几种方法设置excelExport通过POST发送请求,但没有成功


所以,问题是:有没有一种方法可以让excelExport使用POST,或者有没有一种简单的方法可以让我发送与网格发送的POST请求完全相同的POST请求,如果我将其重新加载到可以生成CSV的php函数中,网格会发送这种请求?

在我看来,您想要的是不可能的。我必须更详细地解释我的意思

获取每个HTTP POST包含的CSV、XLS或XLSX文件不是问题。如果要使用HTTP POST,问题是在Excel中显示服务器响应。

excelExport
方法的代码非常简单,您可以看到它。
excelExport
所做的只是打开一个URL,其中将添加一些附加参数。代码的主要部分如下

window.location = url;
因此,所有真正有趣的事情都在服务器上实现。服务器设置一些HTTP头非常重要,特别是
内容类型
,这些头将HTTP响应定义为Excel文件(如果无法生成XLSX数据,则定义为CSV)。我个人使用生成XLSX文件来包含和设置
“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”
作为
内容类型。在您的情况下,它应该是
“text/csv”
(请参阅)。此外,还可以使用
contentdisposition
HTTP头定义响应的首选文件名。例如,在您的案例中,它可以是
“attachment;filename=test.csv”
。因为您已经有了服务器代码,所以您可能已经在代码中实现了所有东西

最重要的部分是:web浏览器知道如何打开不同的URL。如果它打开新的url(per HTTP GET!!!),它将使用相应的应用程序(如Excel)来显示它

另一方面,如果您使用
$.ajax
,您可以获得每个HTTP POST的CSV内容,但是您希望如何解决下一个问题—使用数据启动Excel?如果不使用仅在Internet Explorer中工作的ActiveX控件,我不知道简单的解决方案


所以我建议您只使用HTTPGET。如果不希望缓存数据,可以通过设置相应的HTTP头来实现。在大多数情况下,设置
缓存控制:max age=0
就足够了。设置
缓存控制:private
另外关闭在代理上缓存数据,并声明可以缓存数据,但不能与其他用户共享。关于这个主题的更多信息,你可以在下面找到。

在我看来,你想要的是不可能的。我必须更详细地解释我的意思

获取每个HTTP POST包含的CSV、XLS或XLSX文件不是问题。如果要使用HTTP POST,问题是在Excel中显示服务器响应。

excelExport
方法的代码非常简单,您可以看到它。
excelExport
所做的只是打开一个URL,其中将添加一些附加参数。代码的主要部分如下

window.location = url;
因此,所有真正有趣的事情都在服务器上实现。服务器设置一些HTTP头非常重要,特别是
内容类型
,这些头将HTTP响应定义为Excel文件(如果无法生成XLSX数据,则定义为CSV)。我个人使用生成XLSX文件来包含和设置
“application/vnd.openxmlformats officedocument.spreadsheetml.sheet”
作为
内容类型。在您的情况下,它应该是
“text/csv”
(请参阅)。此外,还可以使用
contentdisposition
HTTP头定义响应的首选文件名。例如,在您的案例中,它可以是
“attachment;filename=test.csv”
。因为您已经有了服务器代码,所以您可能已经在代码中实现了所有东西

最重要的部分是:web浏览器知道如何打开不同的URL。如果它打开新的url(per HTTP GET!!!),它将使用相应的应用程序(如Excel)来显示它

另一方面,如果您使用
$.ajax
,您可以获得每个HTTP POST的CSV内容,但是您希望如何解决下一个问题—使用数据启动Excel?如果不使用仅在Internet Explorer中工作的ActiveX控件,我不知道简单的解决方案

所以我建议您只使用HTTPGET。如果不希望缓存数据,可以通过设置相应的HTTP头来实现。在大多数情况下,设置
缓存控制:max age=0
就足够了。设置
缓存控制:private
另外关闭在代理上缓存数据,并声明可以缓存数据,但不能与其他用户共享。有关该主题的更多信息,请参见下文。

Amy, 我也有同样的问题。 我不是一个程序员(你会意识到我将在这里粘贴的代码:),但我找到的解决方案似乎工作得很好

这是我针对另一个类似问题(与jqGrid无关)的解决方案

正如您所见,它创建了一个表单并将数据发布到一个新页面。 这里的大多数人都会找到一种更好(更优雅)的方法来做到这一点,但这种解决方案,照目前的情况,是有效的。 我需要向服务器发送大量信息,因此GET对我来说是不够的,这就是我需要发布数据的原因

希望这对你有用

JMG.

艾米, 我也有同样的问题。 我不是一个程序员(你会意识到,通过代码我将粘贴在这里)