一尘不染

使用Ajax下载并打开PDF文件

javascript

我有一个生成PDF的动作类。该contentType适当地设定。

public class MyAction extends ActionSupport 
{
   public String execute() {
    ...
    ...
    File report = signedPdfExporter.generateReport(xyzData, props);

    inputStream = new FileInputStream(report);
    contentDisposition = "attachment=\"" + report.getName() + "\"";
    contentType = "application/pdf";
    return SUCCESS;
   }
}

action 通过Ajax调用来称呼它。我不知道将流传输到浏览器的方法。我尝试了几件事,但没有任何效果。

$.ajax({
    type: "POST",
    url: url,
    data: wireIdList,
    cache: false,
    success: function(response)
    {
        alert('got response');
        window.open(response);
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) 
    {
        alert('Error occurred while opening fax template' 
              + getAjaxErrorString(textStatus, errorThrown));
    }
});

上面给出了错误:

您的浏览器发送了该服务器无法理解的请求。


阅读 648

收藏
2020-05-01

共1个答案

一尘不染

您不必为此使用Ajax。只是一个<a>环节是不够的,如果你设置content- dispositionattachment服务器端代码。这样,如果您最关心的是父页面将保持打开状态(为什么您会为此而不必要地选择Ajax?)。此外,没有办法很好地同步处理这个问题。PDF不是字符数据。它是二进制数据。你不能做类似的事情$(element).load()。您想要对此使用
全新的 请求。对于那<a href="pdfservlet/filename.pdf">pdf</a>是完全合适的。

为了在服务器端代码方面为您提供更多帮助,您需要更多地介绍所使用的语言并发布代码尝试的摘录。

2020-05-01