Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何下载具有很长URL的文件?_Javascript_Url_Post_Web_Download - Fatal编程技术网

Javascript 如何下载具有很长URL的文件?

Javascript 如何下载具有很长URL的文件?,javascript,url,post,web,download,Javascript,Url,Post,Web,Download,基本上,我试图触发一个动态构建的文件的下载。为了构造文件,我需要向servlet传递大量信息 这意味着我不能使用GET,我应该使用POST 不过,为了使下载不会弄乱应用程序,我必须打开一个新窗口。问题是我不能这样做: 窗口打开(,“_blank”) 因为这将导致URL限制被超过,并使用GET而不是POST 所有需要发送到servlet的信息都在一个名为“config”的对象中 我的解决方案是使用POST方法在新窗口中编写表单,然后向其添加隐藏输入,然后触发提交,如下所示: var win = w

基本上,我试图触发一个动态构建的文件的下载。为了构造文件,我需要向servlet传递大量信息

这意味着我不能使用GET,我应该使用POST

不过,为了使下载不会弄乱应用程序,我必须打开一个新窗口。问题是我不能这样做: 窗口打开(,“_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();
var-win=window.open(“about:blank”,“_blank”);
win.document.write(“”);
$.each(配置、函数(名称、值){
var fragment=document.createDocumentFragment(),
temp=document.createElement('div');
temp.innerHTML='';
while(临时第一个孩子){
片段.appendChild(临时firstChild);
}
win.document.getElementById(“下载”).appendChild(片段);
});
win.document.getElementById('download').submit();
它在Google Chrome和Firefox中都能工作,但在IE上却不行。在IE(甚至IE 10)上,会打开一个带有“serveletURL”文件名的下载对话框,当我要求保存或打开文件时,不会下载任何内容

我肯定我错过了什么…我该怎么做

谢谢大家!!
Eduardo

具体来说,servelet URL的最后一部分(“文件类型”)是什么?我几乎可以肯定,这与URL的“长度”或“发布”操作无关。我也几乎可以肯定,您的数据正在打包并上传。问题似乎出在“下载”的后面“这是行动的一部分。IE不知何故触发了某种HTTP头或Servlet文件类型,即此类文件应该“下载”而不是“显示”。为了弄清楚到底发生了什么,我们需要知道实际URL的最后一部分。。。但是查询字符串变得很长,所以我不能使用window.open();在新窗口中启动此URL。因此我尝试使用POST表单。但是,服务器响应包含具有“附件”值的适当内容处置标头。