我想做XMLHttpRequest,然后通过POST方法发送文件名,在浏览器中打开PDF。
xmlhttp.open("POST","pdf.php",true); //CHANGE
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("file="+input);
这是可能的还是XMLHttpRequest只适用于HTML?
答案 0 :(得分:5)
如果您要查询的URL实际上返回PDF数据,则无法通过XMLHttpRequest执行。
为什么呢?因为响应是包含原始PDF数据的HTTP响应。即使您可以通过responseText`属性访问数据,也没有JavaScript能够用当前文档的DOM内容替换该数据中包含的PDF,(参见http://www.w3.org/TR/XMLHttpRequest/#the-responsetext-attribute)。
您可以做的是将PDF文件生成到可通过Web服务器的URL访问的临时文件中,然后让脚本发回用于访问该文件的URL。
当您的响应处理程序处理URL时,它可以:
通过更改window.location.href = new_pdf_url
通过更改iframe的<iframe>
属性
src
内
在window.open(new_pdf_url, XXX)
请注意,您仍然需要一个临时文件位置的URL才能打开一个新窗口
答案 1 :(得分:0)
如果您在同一个窗口中打开PDF,则无需使用XmlHttpRequest,只需从您的javascript中设置window.location(window.location.assign("http://example.com/location/file.pdf")
,window.location.href="http://etc
),而不是调用XmlHttpRequest。
(如果你从XmlHttpRequest收到PDF字节,你怎么说服浏览器用PdfPluginX显示它呢?)
如果您希望在新浏览器窗口中使用PDF,只需直接从您的javascript使用window.open(...)
。
答案 2 :(得分:0)
是的,可以这样做,首先您需要将文件作为 arrayBuffer 获取,然后使用新的 blob 创建一个对象 url,然后分配给 src。
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.type = 'arraybuffer';
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200){
var blobSrc = window.URL.createObjectURL(new Blob([this.response], { type: 'application/pdf' }));
// assign to your iframe or to window.open
yourIframe.src = blobSrc;
}
答案 3 :(得分:-1)
你可以尝试这个:
var xmlHttp = new XMLHttpRequest();
xmlHttp.onreadystatechange = function() {
if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
var file = window.URL.createObjectURL(xmlHttp.response);
var a = document.createElement("a");
a.href = file; window.open(file);
}
}
xmlHttp.open("GET", '/pdf', true); // true for asynchronous xmlHttp.responseType= "blob";
xmlHttp.send(null);