无法使用 JQuery 下载 Pdf/Excel AJAX get 请求,其中一些数据随 get 请求一起发送
Not able to download Pdf/Excel with JQuery AJAX get request with some data sent with get request
我正在尝试通过 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变量中捕获
我希望在新 window 中打开响应(存储在数据变量中),以便可以开始下载过程。但这是行不通的。相反,浏览器会加载一堆乱码。
如果我没有发出 AJAX 请求,而是使用浏览器搜索选项卡发出获取请求。 PDF 下载很好。
这个有效
$.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);
}
});
我正在尝试通过 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变量中捕获我希望在新 window 中打开响应(存储在数据变量中),以便可以开始下载过程。但这是行不通的。相反,浏览器会加载一堆乱码。
如果我没有发出 AJAX 请求,而是使用浏览器搜索选项卡发出获取请求。 PDF 下载很好。
这个有效
$.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);
}
});