То, что я пытаюсь сделать, это инструмент, в который он будет экспортировать PDF-файл.
Есть два случая:
- Мне не нужно ничего проверять, и сразу после того, как пользователь нажимает кнопку экспорта, он открывает новое пустое окно, потому что я использую заголовкичтобы загрузить файл и после завершения загрузки пустой страницы он закроется.
сценарий для случая 1
$('body').on("click", '.export-invoice-pdf', function () {
// get id
let id = $(this).closest('tr').data('id');
let newWindow = window.open(
'url' + id,
"_blank"
);
newWindow.onload = function() {
newWindow.close();
};
});
Это прекрасно работает
Я должен проверить, есть ли доступный файл PDF для записи.перед открытием нового пустого окна, чтобы получить файл, а затем закрыть его, как в сценарии case1
для случая 2:
$('body').on("click", '.export-invoice-pdf', function () {
// get id
let id = $(this).closest('tr').data('id');
let newWindow = window.open(
'',
"_blank"
);
//Ajax call to check if there is an available file
$.ajax({
type: 'POST',
url: 'url',
data: {'orderId': orderId},
dataType: 'json',
encode: true,
}).success(function (data) {
console.log('1');
if (data.hasFile === true) {
//if has file do the samething as case 1
newWindow.location.href = 'url' + orderId;
newWindow.onload = function() {
newWindow.close();
};
} else {
alert('no file to export');
}
}).error(function () {
});
});
Теперь это не работает.На самом деле моя первая проблема заключалась в том, что он не делал новое окно, потому что оно рассматривает его как всплывающее окно, но я исправил это после часа исследований.Теперь закрытие окна - моя проблема.
Я уже посмотрел его и до сих пор смотрю не только здесь, но, к сожалению, я не смог найти ответ по этой проблеме.Любая помощь приветствуется.
Обновление: Мне помогло то, что я использовал XMLHttpRequest, так что мне не нужно открывать новую пустую вкладку, чтобы моиЗаголовки php послужат мне файлом PDF.
Вот код, который я использую:
let xhr = new XMLHttpRequest();
//we use responseType arraybuffer so that the pdf file won't be blank
xhr.open('GET', url);
xhr.responseType = 'arraybuffer';
xhr.onload = function(e) {
if (this.status === 200) {
var blob = new Blob([this.response], {type:"application/pdf"});
var link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = "nameofpdf.pdf";
link.click();
}
};
xhr.send();
URL-адрес, который я использовал, был обработан контроллером, который все еще дает мне файл PDFс использованием заголовков php.