Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery 使用Ajax在Django中打开Reportlab生成的PDF文件_Jquery_Ajax_Django_Reportlab - Fatal编程技术网

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

Jquery 使用Ajax在Django中打开Reportlab生成的PDF文件,jquery,ajax,django,reportlab,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){

我正在使用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成功地处理它的请求,只能调用错误回调。这一问题也提到了同样的问题


但是没有人回答。我遗漏了什么吗?

您不能通过ajax下载文件。但您可以使用此库:

jQuery文件下载是一个跨服务器平台兼容的jQuery插件,它提供了一种类似Ajax的文件下载体验,这在使用web时通常是不可能的


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

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

<form id="my_form" action="export" method="post">
    <input id="my_form_data" type="hidden" name="data" />
</form>
$('#my_form_data').value(JSON.stringify(data));
$('#my_form').submit();