基本上我试图触发动态构建的文件的下载。为了构造文件,我需要将大量信息传递给servlet。
这意味着我不能使用GET,我应该使用POST。
为了让下载不要弄乱应用程序,我必须打开一个新窗口。问题是我不能这样做: window.open(http://very.long.url.com/.../,“_ blank”);
因为这会导致超出URL限制并使用GET而不是POST。
需要发送到servlet的所有信息都在一个名为“config。
的对象中我的解决方案是使用POST方法在新窗口中编写表单,然后向其中添加隐藏的输入,然后触发提交,如下所示:
var win = window.open("about:blank", "_blank");
win.document.write("<form method='post' id=donwload action='serveletURL'></form>");
$.each(config, function (name, value) {
var fragment = document.createDocumentFragment(),
temp = document.createElement('div');
temp.innerHTML = '<input type=\'hidden\' name=\'' + name + '\' value=\'' + value + '\'></input>';
while (temp.firstChild) {
fragment.appendChild(temp.firstChild);
}
win.document.getElementById("download").appendChild(fragment);
});
win.document.getElementById('download').submit();
它适用于谷歌Chrome和Firefox,但它不适用于IE。在IE(甚至是IE 10)上,当我要求保存或打开文件时,会打开一个带有“serveletURL”文件名的下载对话框,并且不会下载任何内容。
我确定我错过了什么......我怎么做到这一点?
谢谢! 爱德华