所以我有ExtJS应用程序,其中Combo中的某个打开导致文件下载(读取:导出为PDF)。现在我们使用window.open
来执行此操作,其中我们点击了一个特定的URL,该URL本质上是RESTful,类似于。
window.open('https://example.com/myapp/api/module/someId/exportPDF.pdf?clientId=bizzare123¶m1=someValue');
这会打开新标签,我会下载文件。现在这在理论上是一个GET请求(虽然它没有出现在Chrome DevTools的“网络”选项卡中),我想传递一些JSON数据作为请求体(数据很大,所以我不能将它放在请求参数中)。 / p>
可以通过使用Ext.Ajax.request
调用相同的网址并传递jsonData
来完成此操作吗? (我相信那时我必须处理success
回调中响应中的文件。
谢谢!
P.S。我在使用ExtJS 4.0
更新
早些时候我们只有GET请求下载文件但是为了支持新功能,我们必须先通过发送POST请求来自定义下载,然后API直接发送文件以响应POST请求。
但是正如评论中提到的rixo可能无法直接进行文件的异步下载,我不得不更改API,以便在POST请求中发送文件URL,然后我可以点击该URL并启动文件下载。鉴于它是巨大的企业网络应用程序影响数百万用户,主要使用IE,我想避免使用现代API(这显然很诱人,但在IE上不支持,像往常一样)。
答案 0 :(得分:1)
您想在GET请求中添加请求正文吗?这不是GET协议的典型应用(虽然spec没有明确禁止),因此ExtJS不支持开箱即用。
您可以在ExtJS源代码(4.0.7)中看到GET请求的参数会自动附加到请求URI。
if ((method == 'GET' || data) && params) {
url = Ext.urlAppend(url, params);
params = null;
}
This answer has more details,但要点是“编写一个会为您重写请求的代理”。
答案 1 :(得分:0)
如果您只想下载文件,常见的方法是在文档中嵌入一个空的隐藏IFRAME,然后将“src”属性设置为get请求的URL。
这是一个很好的方式:
Download File Using Javascript/jQuery
这可以避免新标签或窗口打开时的整个问题。
这不能直接回答您的问题。但是,它确实解决了您的基本问题,即如何通过“RESTful”URL启动较少侵入性的文件下载。