我正在尝试使浏览器下载从ajax响应接收到的pdf文件。
受jquery ajax下载pdf文件启发,我模拟了如下单击/下载事件:
var req = new XMLHttpRequest();
req.open("POST", "/servicepath/Method?ids=" + ids, true);
req.responseType = "blob";
req.onreadystatechange = function () {
if (req.readyState === 4 && req.status === 200) {
var blob = req.response;
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "PdfName-" + new Date().getTime() + ".pdf";
link.click();
}
};
req.send();
不幸的是,这仅适用于Chrome,不适用于Firefox + IE。当我尝试在最后两个浏览器中触发它时,没有任何反应。
由于从CMS继承,脚本和标记被放置在iframe中,但是我不确定这是否有影响。
关于如何针对所有现代浏览器进行优化的想法?
关于如何针对所有现代浏览器进行优化的想法?
是的,我可以为您提供在Windows 10上经过IE11,Firefox 47和Chrome 52测试的解决方案。目前,Microsoft
Edge尚无任何功能。
开始时,您需要区分是使用IE还是其他两种浏览器。这是因为在IE11上您可以使用:
window.navigator.msSaveBlob(req.response, "PdfName-" + new Date().getTime() + ".pdf");
对于其他两个浏览器,您的代码可在Chrome上运行,但不能在Firefox上运行,因为您没有将元素附加到文档正文中。
因此,更正后的代码是:
var req = new XMLHttpRequest();
req.open("POST", "/servicepath/Method?ids=" + ids, true);
req.responseType = "blob";
req.onreadystatechange = function () {
if (req.readyState === 4 && req.status === 200) {
// test for IE
if (typeof window.navigator.msSaveBlob === 'function') {
window.navigator.msSaveBlob(req.response, "PdfName-" + new Date().getTime() + ".pdf");
} else {
var blob = req.response;
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "PdfName-" + new Date().getTime() + ".pdf";
// append the link to the document body
document.body.appendChild(link);
link.click();
}
}
};
req.send();
问题内容: 我想下载一个jQueryajax响应的pdf文件。Ajax响应包含pdf文件数据。。我的代码在下面给出,但是我总是得到一个空白的pdf。 问题答案: jQuery使用AJAX请求加载二进制数据时存在一些问题,因为它尚未实现某些HTML5 XHRv2功能 鉴于此,您拥有以下两种解决方案之一: 第一个解决方案是放弃JQuery并使用XMLHTTPRequest 与本地HTMLHTTPReq
当我第一次调用方法时,它成功地下载了文件,但我得到了以下错误: https://madrasty.dev.ibtdi.work/public/reports/15287105135b1e4571f2596-new.pdf(函数)错误:responseSerializationFailed(AlamoFire.Aferror.ResponseSerializationFailureRereason.
我的python3代码: 它将内容保存在metadat.pdf但那不是pdf的真正内容,它是这个html页面: 任何帮助,我如何才能保存文件的真实内容,而不是这个html?它应该是真正的pdf,当我下载它是jsut这个html页面 更新: 当我使用Python会话时,从服务器的一个NSWER:
问题内容: 我有一个生成PDF的动作类。该适当地设定。 我 通过Ajax调用来称呼它。我不知道将流传输到浏览器的方法。我尝试了几件事,但没有任何效果。 上面给出了错误: 您的浏览器发送了该服务器无法理解的请求。 问题答案: 您不必为此使用Ajax。只是一个环节是不够的,如果你设置到服务器端代码。这样,如果您最关心的是父页面将保持打开状态(为什么您会为此而不必要地选择Ajax?)。此外,没有办法很好
问题内容: 我想在浏览器中使用ajax和ActionResult下载文件。该文件已下载并从我的ActionResult返回。 我看到Http查询正常,并且在响应正文中看到了数据。问题是不建议将该文件保存在浏览器中。 一切似乎都很好。我在教程和论坛中看到的所有内容都和我一样,但我没有说过XD。我不明白我和其他人之间有什么区别。 这是我的ActionResult: 这是我的javascript: 谢谢
问题内容: 我的GSP中有这个ajax调用: 这是我的控制器操作的代码块: 我从通过$ .Ajax方法从视图传递的数据中获取票证列表。比我将数据格式化为CSV格式,然后我想将数据导出为CSV文件,但没有任何反应。数据已发送到客户端,但是由于内容配置不正确,因此没有可供下载的文件。我想念什么?我试图做类似的事情: 并在控制器中生成纯字符串,但是那样我得到的文件没有扩展名是不可接受的。 我该如何实现?