使用ajax发布复杂数据并在新窗口中打开返回的PDF
我需要使用JQuery ajax将复杂且敏感的数据对象(嵌套对象,数组和个人身份信息)发布到我的服务器,在该服务器中生成PDF并将其返回给客户端。 然后,客户端浏览器应在新窗口中打开PDF。
由于数据的性质,请求既不能也不应该是编码的URL – 它必须包含数据作为JSON主体。
关于这个问题的其他问题/答案并没有解决我的问题或完全没有解决问题。
解
- POST将身体中的数据作为JSON。
- 设置对
arraybuffer
的响应的预期Content-Type
(在客户端和服务器上)。 - 请求成功完成后,将响应转换为
Blob
。 - 创建
Blob
的对象URL并在新窗口中打开它。
笔记
- JQuery ajax 不支持
arraybuffer
Content-Type
因此必须使用基本JavaScriptxhr
(如果没有任何其他选项)。 - Internet Explorer具有处理和显示
Blob
的function,因此需要特殊情况。 - 支持的浏览器不包括IE9
码
RequestPdf = function (url, data) { var request = new XMLHttpRequest(), file, fileURL; request.open("POST", url); request.setRequestHeader("Content-Type", "application/json;charset=UTF-8"); request.responseType = "arraybuffer"; request.send(data); request.onreadystatechange = function () { if (request.readyState === 4 && request.status === 200) { file = new Blob([request.response], { type: 'application/pdf' }); if (window.navigator && window.navigator.msSaveOrOpenBlob) { // IE window.navigator.msSaveOrOpenBlob(file); } else { fileURL = URL.createObjectURL(file); window.open(fileURL); } } }; };