我在django网站上使用reportlab来创建和返回PDF。到目前为止,这仅限于一个“报告”页面,但我试图扩展它所使用的地方。我已经创建了一个返回正确响应的ajax调用,但保存/查看PDF的对话框从不显示,而是页面刷新。我猜这是因为我的ajax调用没有成功函数,但我不确定它应该是什么。
JS:
function get_report(){
$.ajax({
url: '{{root_url}}/timecard/',
type: 'POST',
data: {'emp_id':employee_id},
dataType: 'html',
});
}
HTML:
<input id="id_report" type="submit" value="Print" onclick="get_report()"/>
Django的:
def view_timecard(request):
if request.method == 'POST':
response = get_timecard_report(request)
return response
函数get_timecard_report使用预先存在的函数来构造一个响应,该响应在原始页面上显示一个对话框,以打开或保存PDF。使用调试器,返回的响应看起来与正常运行的响应相同。
我想我只需要在ajax成功中正确处理这个问题,但我不确定那会是什么。
答案 0 :(得分:0)
看起来你正在进行ajax调用,但没有处理响应。 你是对的,失去了成功的功能。您只需要填充HTML元素(您可以使用&#39; frame&#39;对象&#39; html标记将pdf嵌入到html页面中)并使用响应并处理ajax错误。
ajax({
url: '{{root_url}}/timecard/',
type: 'POST',
data: {'emp_id':employee_id},
dataType: 'html',
success: function(response){
if (response)
<get document elementid and set the inner html as the PDF response using javascript>
},
error: function(xhr,status,error){
if xhr.readyState == 0 || xhr.status == 0
return;
else
alert("xhr status:" + xhr.status); alert("in get_report function")
}
})
顺便说一句,您的观看代码不清楚,但您需要将PDF作为附件输出。
这样的事情: 回复[&#39;内容 - 处置&#39;] =&#39;附件;文件名=&#34; somefilename.pdf&#34;&#39;