对AJAX的PDF响应不会显示

时间:2014-07-24 17:51:18

标签: ajax django pdf reportlab

我在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成功中正确处理这个问题,但我不确定那会是什么。

1 个答案:

答案 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;

Output PDFs with django