У меня есть запрос GET Ajax, который возвращает мне контент, закодированный в форме application/pdf. Например, мои просьбы возвращает строку такого типа:Открыть pdf-материал в новой вкладке браузера
% PDF-1.4% 4 0 объект <> поток х endstream endobj 6 0 объект <> Поток х ] o 0 + e {Q $ R N @ - n wBL $ .JDL | > 獝 [ > {= _'(寒 1`ؚ yWGXϽo16Ӳ.4 (uC8jHl f6 * k Fa^e G = J0 } 7L z p H & ɴ L Z
Извините, что у меня есть специальные символы: проблема заключается именно в этом. Я хотел бы получить этот ответ, полученный по моему запросу, и правильно напечатать этот контент на другой вкладке браузера. Я написал код для этого: я использовал объект Blob. Открыта страница для «чтения pdf». Тем не менее, я вижу только документ в формате PDF, который является полностью белым, что свидетельствует о том, что мой ответ не был записан в документе, который был создан.
Ниже я покажу вам код моего запроса:
$.ajax({
type: "GET",
url:urll + parameter,
async: true,
crossDomain: true,
accept: {
pdf: 'application/pdf'
},
success:function(response, status, xhr){
alert("Response: "+response);
alert("Status: "+status);
alert("Xhr: "+xhr);
// check for a filename
var filename = "";
var disposition = xhr.getResponseHeader('Content-Disposition');
if (disposition && disposition.indexOf('attachment') !== -1) {
var filenameRegex = /filename[^;=\n]*=((['"]).*?\2|[^;\n]*)/;
var matches = filenameRegex.exec(disposition);
if (matches != null && matches[1]) filename = matches[1].replace(/['"]/g, '');
}
var type = xhr.getResponseHeader('Content-Type');
var blob = new Blob([response], { type: type });
if (typeof window.navigator.msSaveBlob !== 'undefined') {
// IE workaround for "HTML7007: One or more blob URLs were revoked by closing the blob for which they were created. These URLs will no longer resolve as the data backing the URL has been freed."
window.navigator.msSaveBlob(blob, filename);
} else {
var URL = window.URL || window.webkitURL;
var downloadUrl = URL.createObjectURL(blob);
if (filename) {
// use HTML5 a[download] attribute to specify filename
var a = document.createElement("a");
// safari doesn't support this yet
if (typeof a.download === 'undefined') {
//window.location = downloadUrl;
window.open(downloadUrl, '_blank');
} else {
a.href = downloadUrl;
a.download = filename;
document.body.appendChild(a);
a.setAttribute("target","_blank");
a.click();
}
} else {
//window.location = downloadUrl;
window.open(downloadUrl, '_blank');
}
setTimeout(function() { URL.revokeObjectURL(downloadUrl); }, 100); // cleanup
}
},
error: function(xhr,status,error){
alert("error "+xhr+" "+error+" "+status);
}
});
Это дубликат [this] (http://stackoverflow.com/questions/22268167/how-to-display-pdf-or-any-document -from-server-in-a-new-browser-window-throug)? –