我正在使用带有javascript和jquery的Phonegap。我创建了一个java servlet,它返回一个pdf文件。我可以在浏览器中正确获取文件,但我不能在Phonegap上。
我的代码就是这个(javascript):
$.ajax({
type: "GET",
url: "http://x.x.x.x:xxxx/MyApp/PDF",
success: function(data, textStatus, request) {
alert("pdf OK");
window.open(data, "_system");
},
error: function(data, textStatus, request) {
alert("pdr error");
}
这里的servlet(这可以在浏览器中正常工作):
protected void doGet(HttpServletRequest req, HttpServletResponse response) throws ServletException, IOException {
try {
// Create PDF (this works fine)
String ruta = getServletContext().getRealPath(reportTemplateUrl);
InputStream resourceAsStream = new FileInputStream(ruta);
jasperDesign = JRXmlLoader.load(resourceAsStream);
jasperReport = JasperCompileManager.compileReport(jasperDesign);
jasperPrint = JasperFillManager.fillReport(jasperReport, null, new JRBeanCollectionDataSource(findReportData(name)));
File pdf = new File("output.pdf");
JasperExportManager.exportReportToPdfStream(jasperPrint, new FileOutputStream(pdf));
// Send PDF
response.setContentType("application/pdf");
response.addHeader("Content-Disposition", "attachment; filename=output.pdf");
response.setContentLength((int) pdf.length());
InputStream fileInputStream = new FileInputStream(pdf);
OutputStream responseOutputStream = response.getOutputStream();
int bytes;
while ((bytes = fileInputStream.read()) != -1) {
responseOutputStream.write(bytes);
}
System.out.println("CREATED!");
} catch (JRException e) {
e.printStackTrace();
}
此代码在带有Phonegap的iPad上运行,我始终收到OK警报。从iPad的浏览器中我可以下载并阅读pdf(我将URL作为普通页面放在浏览器中),一切正常。
我认为问题是“数据”,来自javascript,我不知道我是否需要先保存文件或如何显示它...
是的,我需要使用servlet和ajax,PDF是动态的。我不介意用内部或外部浏览器打开它,但我需要看到它。
谢谢! :)
答案 0 :(得分:0)
好吧,我解决了这个问题,在javascript打开新浏览器上的网址时进行GET调用:
window.open("http://.../PDF?id=id&name=name&...", "_blank");
没有ajax。
谢谢大家