如何使用ajax

时间:2019-06-03 10:21:57

标签: ajax laravel pdf

我正在使用AJAX返回laravel控制器转换为pdf的html(由于js进行了一些计算)。 然后,将生成的pdf保存在我的文件夹中后,需要在新选项卡中打开它。 我不想使用存储/公用文件夹。因为存储目录下还有其他私有文件夹,所以我要保存。所以我无法获得它们与laravel的链接。

在我的控制器中,我有:

    $pdf = PDF::loadHTML($pdf_html)->setPaper('A4')->setOption('header-html', $header)->save($filepath.$filename);

    $headers = [
        'Content-Type' => 'application/pdf',
        'Content-Disposition' => 'inline',
    ];

    return Response::make(file_get_contents($filepath.$filename), 200, $headers);

我的js:

    $.ajax({
        method: "POST",
        url: '/generatepdf',
        headers: {
            'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        success: function (data) {
        console.log(data);
                    /*What to do here?*/ 
        }

我得到了: DOMException: Failed to execute 'open' on 'Window': Unable to open a window with invalid URL 预先感谢。

1 个答案:

答案 0 :(得分:0)

不要在您的函数中返回Response,而是返回已保存的pdf的文件名(如果此pdf专有,则包括文件夹名称)。
然后使用Ajax回调打开该网址。

success: function(data){
    window.open('pdf/'+data, '_blank');
}

由于将PDF保存在存储文件夹中,因此需要一条路线和一个处理程序。

Route::get('pdf/{filename}', 'SomeController@getPdf');

在您的控制器中:

public function getPDF($filename){
    (maybe add some code to check if user is authorized)
    return response()->download(storage_path('path-to-pdf-folder'.$filename), null, [], null);
}