Javascript 使用ajax发布复杂数据并在新窗口中打开返回的PDF
我需要使用jqueryajax将复杂而敏感的数据对象(嵌套对象、数组和个人识别信息)发布到我的服务器上,在服务器上生成PDF并返回给客户端。然后,客户端浏览器应在新窗口中打开PDF 由于数据的性质,请求既不能也不应该是编码的URL——它必须将数据作为JSON体包含Javascript 使用ajax发布复杂数据并在新窗口中打开返回的PDF,javascript,jquery,.net,ajax,pdf,Javascript,Jquery,.net,Ajax,Pdf,我需要使用jqueryajax将复杂而敏感的数据对象(嵌套对象、数组和个人识别信息)发布到我的服务器上,在服务器上生成PDF并返回给客户端。然后,客户端浏览器应在新窗口中打开PDF 由于数据的性质,请求既不能也不应该是编码的URL——它必须将数据作为JSON体包含 关于这个主题的其他问题/答案没有解决我的问题,或者没有完全解决问题。解决方案 将正文中的数据作为JSON发布 将响应的预期内容类型设置为arraybuffer(在客户端和服务器上) 请求成功完成后,将响应转换为Blob 创建指向Blo
关于这个主题的其他问题/答案没有解决我的问题,或者没有完全解决问题。解决方案
arraybuffer
(在客户端和服务器上)Blob
Blob
的对象url,并在新窗口中打开它- JQuery ajax必须使用
arraybuffer
,因此必须使用基本JavaScript内容类型
(如果没有任何其他选项)xhr
- Internet Explorer有自己的处理和显示
的功能,因此需要特殊情况Blob
- 不包括IE9
RequestPdf=函数(url、数据){
var request=new XMLHttpRequest(),文件,fileURL;
打开(“POST”,url);
setRequestHeader(“内容类型”,“应用程序/json;字符集=UTF-8”);
request.responseType=“arraybuffer”;
请求发送(数据);
request.onreadystatechange=函数(){
if(request.readyState==4&&request.status==200){
file=newblob([request.response],{type:'application/pdf'});
if(window.navigator&&window.navigator.msSaveOrOpenBlob){//IE
window.navigator.msSaveOrOpenBlob(文件);
}否则{
fileURL=URL.createObjectURL(文件);
window.open(fileURL);
}
}
};
};
将.responseType
设置为“arraybuffer”
的目的是什么,其中arraybuffer
然后转换为Blob
?createObjectUrl
仅将Blob
(或文件
)作为输入参数。如果服务器以内容类型响应:application/PDF
header,则“生成PDF并返回到客户端”,是否可以使用responseType=“blob”
?响应没有内容类型:application/pdf
标题集?响应实际上有内容类型:arraybuffer
集。不过,我没有尝试直接将其设置为blob
。您的建议可能会更直接地解决这方面的问题。另请参见,