$scope.downloadPDF = function(){
$http.post('/download-pdf', { fid: $routeParams.fid })
.success(function(data, status, headers, config){
console.log("success");
})
.error(function(data, status, headers, config){
console.log("error");
});
};
在我的php文件中,我有以下内容来创建一个带有FPDF库的PDF:
function download_pdf()
{
$id = $_POST['fid'];
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename=' . $id . '.pdf');
$pdf->Output('Order123.pdf', 'D');
}
但是请求是响应这个,而不是打开一个保存对话框来保存我的PDF。
%PDF-1.3 3 0 obj<>endobj 4 0 obj<>stream x 3 R@2π35 W(çR qπw 3 t04多30 pispéz*[(hx·ääää+çó)·(j*dé7 w endstream endobj 1 0 obj
我已经使用了PHPExcel库,它起到了作用:
$objWriter = PHPExcel_IOFactory::createWriter($ea, 'Excel2007');
// We'll be outputting an excel file
header('Content-type: application/vnd.ms-excel');
// It will be called Submission on [date_now].xls
header('Content-Disposition: attachment; filename="' . $filename . '.xls' . '"');
// Write file to the browser
$objWriter->save('php://output');
现在我怎样才能使这工作为我的PDF?
更新:
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(40,10,'Hello World!');
$filename = DXS_VKGROUP_PLUGIN_LIB_DIR . 'uploads/' . $_POST['fid'] . '.pdf';
$pdf->Output($filename, 'F'); // Save file locally
header('Pragma: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Content-Type: application-download');
header('Content-Length: ' . filesize($filename));
header('Content-Transfer-Encoding: binary');
header('Content-Disposition: attachment; filename="' . $filename . '"');
$handle = fopen($filename, 'rb');
fpassthru($handle);
fclose($handle);
更新
使用filesaver.js的方法也不起作用,似乎没有办法单独通过JavaScript强制调用原生Save As对话框,只有IE的saveAsexecCommand
例外。检查execCommand SaveAs在Firefox中工作吗?
<罢工> 包括 js作为项目中的依赖项
$scope.downloadPDF = function() {
$http.post('/download-pdf', {
fid: $routeParams.fid
}, {
responseType: 'arraybuffer'
})
.success(function(data, status, headers, config) {
// Convert response data to Blob
var file = new Blob([data], {
type: 'application/pdf'
});
// Call the File Saver method to save the above Blob,this will show Save As dialog
saveAs(file, "test.pdf");
})
.error(function(data, status, headers, config) {
console.log("error");
});
};
问题内容: HTTP请求的标头中是否有任何内容可以区分给定客户端的AJAX调用和直接浏览器请求?用户代理字符串通常是否相同? 问题答案: 如果您使用Prototype,jQuery,Mootools或YUI,则应该找到一个 X-Requested-With:XMLHttpRequest 标头,它将为您解决问题。应该可以在其他库中插入任何您喜欢的标头。 在最低级别上,给定XMLHttpRequest
问题内容: 我正在开发一个使用大量ajax的grails应用程序。如果请求是ajax调用,那么它应该给出响应(这部分正在工作),但是如果我在浏览器中输入URL,它应该带我到主页/索引页面而不是请求的页面。下面是Ajax调用的示例gsp代码。 如果我们在浏览器URL栏中键入http:// localhost:8080 / Dash / todo / list ,则控制器应重定向到http:// lo
我正在浏览一个似乎通过javascript填充数据的网页。我想为我的浏览器使用一个扩展,它可以让我看到对什么url发出了什么请求,以及从请求中返回了什么数据。 任何帮助都将不胜感激。
本文向大家介绍浅谈Ajax请求与浏览器缓存,包括了浅谈Ajax请求与浏览器缓存的使用技巧和注意事项,需要的朋友参考一下 在现代Web应用程序中,前端代码充斥着大量的Ajax请求,如果对于Ajax请求可以使用浏览器缓存,那么可以显著地减少网络请求,提高程序响应速度。 1. Ajax Request 使用jQuery框架可以很方便的进行Ajax请求,示例代码如下: 非常简单,注意其中的第4行代码:ca
问题内容: 我正在编写一个Web应用程序,该应用程序使用AJAX检索大量数据,该AJAX基本上根据用户单击的按钮修改了加载的页面(假设单击button1会将页面从state0转到state1,依此类推。) 此外,如果将按钮号作为GET变量传递给服务器,则服务器将返回正确状态的页面。 不用说,后退/前进浏览器按钮不起作用,因为在通过AJAX完成状态更改期间URL不会更改。 所以,我的问题是,如何使浏
问题内容: AJAX请求和直接浏览器请求之间有什么区别(就如何调用和加载网页而言)? 换句话说,我的意思是:服务器直接请求与客户端请求(由浏览器启动)的处理方式是否有所不同? 问题答案: 就服务器而言,AJAX请求 与 “正常”浏览器请求 相同 ,除了可能略有不同的HTTP标头之外。例如chrome发送: 我不知道如果这头标准化与否,或者如果它在每一个浏览器不同,甚至包括 所有 在每个浏览器。 编