DomPDF не загружает файл для запроса AJAX на Laravel

Я работаю над «DomPDF», используя запрос Ajax Post в проекте Laravel. Ниже приведен код ajax.

       $.ajaxSetup({
            headers: {
                'X-CSRF-TOKEN': $('meta[name = "csrf-token"]').attr('content')
            }
        });
        $.ajax({
            url:"{{ route('screen.pdfticket') }}",
            method:"POST",
            data:{
                id:$('#screenid').val()
            },
            success:function(data){
                console.info(data);
            }
        });

А ниже код в контроллере.

    $customPaper = array(0,0,216,158);
    $pdf->loadView("screen.ticket" , [ 
        'clinic' => 'clinic name' , 
        'queno' => $screen->que
    ])->setPaper($customPaper, 'landscape');
    return $pdf->download($screen->que .'.pdf');  

Я могу получить правильный ответ, но это не читаемый формат. Я хотел бы сохранить в формате pdf после того, как ajax вызвал успех. Любые советы или рекомендации будут с благодарностью, спасибо.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
4 709
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Используйте stream() для потоковой передачи созданного PDF-файла в браузер и используйте output() для получения правильного формата возврата. См. https://github.com/dompdf/dompdf/wiki/Использование для получения дополнительной информации.

Ответ принят как подходящий

Поскольку вы делаете запрос с помощью AJAX, вам нужен способ, чтобы браузер загружал ресурс.

Есть способы пойти, но не ограничиваясь следующим:

  • Верните URL-адрес ресурса в ответ на запрос AJAX, а затем сделайте отдельный запрос браузера для загрузки ресурса.

  • Сделайте большой двоичный объект ответа ресурса на запрос AJAX, а затем загрузите его из URL-адреса большого двоичного объекта.
    Это показано на примере ниже.

function downloadFile(response) {
  var blob = new Blob([response], {type: 'application/pdf'})
  var url = URL.createObjectURL(blob);
  location.assign(url);
} 

$.ajax({
  url: "{{ route('screen.pdfticket') }}",
  method: 'POST',
  data: {
    id: $('#screenid').val()
  }
})
.done(downloadFile);

Уважаемый Олувафеми Суле, Большое спасибо.

joenpc npcsolution 29.05.2019 10:21

Другие вопросы по теме