我有一个使用Post发送请求的jqGrid.我有一个php函数,当给定jqGrid搜索和排序设置时,可以返回一个CSV文件.并且,我已经组合了一个外部按钮,可以调用exportExcel以尝试调用该php函数并检索CSV.
问题是,excelExport正在使用GET发送数据,我仍然需要它进行POST.我查看了代码并尝试了几种方法来设置excelExport以通过POST发送请求而没有运气.
所以,问题是:有没有办法让excelExport使用POST,或者是否有一种简单的方法让我发送完全相同的POST请求,如果我将它重新加载到可以生成CSV?
在我看来,你想要的是不可能的.我必须更详细地解释我的意思.
根据HTTP POST获取CSV,XLS或XLSX文件不是问题.如果您将使用HTTP POST,问题是在Excel中显示服务器响应.
excelExport方法代码非常简单,你可以在这里看到它.什么excelExport是打开一个URL,其中将添加一些额外的参数.代码的主要部分如下
window.location = url;
Run Code Online (Sandbox Code Playgroud)
因此,所有真正有趣的事情都在服务器上实现.服务器设置一些HTTP标头非常重要,尤其是Content-Type将HTTP响应定义为Excel文件(如果无法生成XLSX数据,则定义为CSV).我个人使用Open XML SDK 2.0生成XLSX文件包含并设置"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"为Content-Type.在你的情况下它应该是"text/csv"(见这里).另外,可以使用Content-DispositionHTTP标头来定义响应的首选文件名.例如,它可以"attachment; filename=test.csv"在您的情况下.因为您已经拥有服务器代码,所以可能在代码中实现了所有内容.
最重要的部分是:Web浏览器知道如何打开不同的URL包含.如果它打开新的URL(每个HTTP GET !!!)它将使用相应的应用程序,如Excel来显示它.
另一方面,如果你使用,$.ajax你可以获得CSV包含每个HTTP POST,但你想如何解决下一个问题 - 用数据启动Excel?如果不使用仅在Internet Explorer中工作的ActiveX控件,我不知道简单的解决方案.
所以我建议你只使用HTTP GET.如果您不想缓存数据,可以通过设置相应的HTTP标头来完成此操作.Cache-Control: max-age=0在大多数情况下,设置就足够了.设置Cache-Control: private额外关闭缓存代理上的数据,并声明该数据可能会被缓存,但不与其他用户共享.有关该主题的更多信息,请参阅以下缓存教程.
| 归档时间: |
|
| 查看次数: |
7059 次 |
| 最近记录: |