小编典典

如何使用JavaScript打开文件?

ajax

我有一个将pdf文件作为ByteArrayOutputStream写入servlet的输出流的servlet。如果打开servlet
URL,浏览器将打开文件。但是,如果在Servlet上发生错误,浏览器会打开一个带有错误消息的空白pdf。通过ServletResponse发送错误,浏览器将打开默认错误页面。

我要发送错误消息,而不重定向到错误页面或打开无效的pdf文件。

我试过了:

new Ajax.Request('/pdfservlet', {            
        onSuccess: function(response) {
            docWindow = window.open('','title');
            docWindow.document.open('application/pdf');
            docWindow.document.write(response);
            docWindow.document.close();
        },
        onFailure: function(response) {
            alert(response);
        }
    });

但是,onSuccess会打开一个带有[object object]的页面

如何使用JavaScript打开PDF文件?


阅读 440

收藏
2020-07-26

共1个答案

小编典典

注意:我假设您正在通过Ajax.Request调用使用Prototype框架。

响应对象并不意味着要直接写入,但它确实,有responseText应包含返回PDF属性。

你有没有尝试过:

new Ajax.Request('/pdfservlet', {            
        onSuccess: function(response) {
            docWindow = window.open('','title');
            docWindow.document.open('application/pdf');
            document.write(response.responseText);
            docWindow.document.close();
        },
        onFailure: function(response) {
            alert(response);
        }
    });

(注意已添加.responseText

编辑: 好的,所以那行不通…尝试这样的事情:

new Ajax.Request('/pdfservlet', {            
        onSuccess: function(response) {
            window.open('/pdfservlet');
        },
        onFailure: function(response) {
            alert(response);
        }
    });

这将创建ajax请求,如果成功,则在新窗口中打开它。打开新窗口应该很快,并且实际上不需要再次请求PDF,因为浏览器应该在Ajax.Request调用期间将其缓存了。

2020-07-26