【问题标题】:Not able to download Pdf/Excel with JQuery AJAX get request with some data sent with get request无法使用 JQuery AJAX 获取请求下载 Pdf/Excel,其中一些数据与获取请求一起发送
【发布时间】:2020-10-05 10:45:18
【问题描述】:

我正在尝试通过 GET/POST 请求向服务器发送一些数据。

然后服务器准备一个 PDF(使用 mpdf 库)并将其发送回客户端。

发送带有数据的 GET/POST 请求的前端代码如下。

$("#edit_setting").click(function () {
        $.ajax({
            url: "http://localhost:8000/get_pdf",
            type: "POST",
            data: {
                data : {
                    "abhinav" : "kumar keshari"
                }
            },
            headers: {
                'Accept': "application/json",
                'Authorization': 'Bearer ' + getCookie(ACCESS_TOKEN),
            },
            success: function (data, textStatus, request) {
                let w = window.open('about:blank');
                w.document.open();
                w.document.write(data);
                w.document.close();
            },
            error: function (XMLHttpRequest, data) {
                console.log("something went wrong.");
                console.log(data);
                console.log(XMLHttpRequest.status);
                console.log(XMLHttpRequest.responseJSON);
            }
        });
    });

在服务器端,控制器发送 PDF。

class DownloadPdfController
{
    public function store(Request $request){
        $data_received = $request->data;
        error_log(print_r($data_received,true));
        $mpdf = new \Mpdf\Mpdf();

        $mpdf->Bookmark('Start of the document');
        $mpdf->WriteHTML('<div>Section 1 text</div>');
        return $mpdf->Output();

    }
}

服务器发送的pdf被捕获在AJAX成功回调的data变量中。

我希望在新窗口中打开响应(存储在数据变量中),以便开始下载过程。但这不起作用。相反,浏览器会加载一堆乱码。

如果不是发出 AJAX 请求,而是使用浏览器搜索选项卡发出 get 请求。 PDF 下载正常。

【问题讨论】:

    标签: jquery ajax laravel-5 mpdf


    【解决方案1】:

    这行得通

    $.ajax({
            url: "http://localhost:8000/get_excel",
            type: "POST",
            data: {data : list_of_tables},
            dataType: 'binary',
            xhrFields: {
                'responseType' : 'blob'
            },
            headers: {
                'Accept': "application/json",
                'Authorization': 'Bearer ' + getCookie(ACCESS_TOKEN),
            },
            success: function (data, textStatus, request) {
                alert("success in fetching data");
                let url = URL.createObjectURL(data);
                let $a = $('<a />', {
                    'href': url,
                    'download': 'document.xlsx',
                    'text': "click"
                }).hide().appendTo("body")[0].click();
    
                // URL.revokeObjectURL(url);
    
            },
            error: function (XMLHttpRequest, data) {
                console.log("error in show_history");
                console.log(data);
                console.log(XMLHttpRequest.status);
                console.log(XMLHttpRequest.responseJSON);
            }
        });
    
    

    【讨论】:

      猜你喜欢
      • 2012-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多