使用Ajax打开由Django中的Reportlab生成的PDF文件

时间:2013-12-24 14:52:54

标签: jquery ajax django reportlab

我正在使用Reportlab和Django生成在客户端计算的数据的pdf。

选择Ajax是因为客户端有非平凡的数据要传输以生成pdf。

$.ajax({
    type:'POST',
    url:document.URL + '/export',
    data: JSON.stringify(data),
    dataType:'json',
    contentType:'application/pdf',
    success:function(data){
        // Question 1. What should I insert here to download pdf?
    },
    error:function(e){
        ...
    }
});

这是view.py

def export(request, *args, **kwargs):

    // Perform Ajax check
    ...

    response = HttpResponse(content_type='application/pdf')
    response['Content-Disposition'] = 'attachment; filename="essay.pdf"'

    p = canvas.Canvas(response, bottomup=0)
    data = json.loads(request.body)

    p.drawString(100, 100, "Hello world.")
    p.showPage()
    p.save()
    return response

问题2.我无法让ajax成功处理其请求,只调用错误回调。这个问题提到了同样的问题

ReportLab in Django

但没有回答。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

您无法通过ajax下载文件。但您可以使用此库:jquery.fileDownload

  

jQuery File Download是一个兼容跨服务器平台的jQuery插件,它允许类似Ajax的文件下载体验,而这种体验通常不能通过网络实现。

答案 1 :(得分:1)

我的解决方案是使用标准表单而不是ajax。

您可以在html中放置一个表单(或使用JS构建它)

<form id="my_form" action="export" method="post">
    <input id="my_form_data" type="hidden" name="data" />
</form>

然后,当您希望使用JS发送数据时:

$('#my_form_data').value(JSON.stringify(data));
$('#my_form').submit();