javascript - 无法使用 XMLHttpRequest 和 Xhtml2pdf 下载多个文件
问题描述
您好我正在尝试使用 XXLHttpRequest 生成和下载多个文件,但它从未响应 javascript 的请求。
这是我的javascript代码:
{%block javascript%}
<script type="text/javascript">
function exportPDFForAll(employees) {
var employeesList = [
{% for emp in employees %}
{% if not forloop.first %},{% endif %}
{
name: "{{ emp.name }}"
}
{% endfor %}
]
alert(employeesList)
for (var i = 0; i < employeesList.length; i++){
var params = 'selectedName='+employeesList[i].name+'&selectedDate='+$('#date').val()+'&csrfmiddlewaretoken='+$('input[name=csrfmiddlewaretoken]').val();
var req = new XMLHttpRequest();
req.open("POST", "/exportallsheets/", true);
req.responseType = "blob";
//Send the proper header information along with the request
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
req.onload = function (event) {
var blob = req.response;
console.log(blob.size);
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download=employeesList[i].name+"_" + new Date() + ".pdf";
link.click();
};
req.send(params);
}
}
</script>
{%endblock%}
这是我在 Django 中的渲染类:
from io import BytesIO, StringIO
from django.http import HttpResponse
from django.template.loader import get_template
import xhtml2pdf.pisa as pisa
class Render:
@staticmethod
def render(path: str, params: dict):
template = get_template(path)
html = template.render(params)
result = BytesIO()
pdf = pisa.pisaDocument(BytesIO(html.encode("UTF-8")), result)
if not pdf.err:
# return HttpResponse(result.getvalue(), content_type='application/pdf')
response = HttpResponse(result.getvalue(), content_type='application/pdf')
filename = "Invoice_%s.pdf" %(params['name'])
content = "inline; filename=%s" %(filename)
content = "attachment; filename=%s" %(filename)
response['Content-Disposition'] = content
print(response)
return response
else:
return HttpResponse("Error Rendering PDF", status=400)
该代码从 javascript 到 Django 运行良好,它也在内存中创建 pdf,但它永远不会返回到 req.onload 回调。但是,如果我尝试单个文件并且不使用 javascript/ajax 等,那么它可以正常工作并直接下载文件。我很困惑,任何帮助将不胜感激。我在截止日期前运行:(
解决方案
推荐阅读
- r - 在 R 中设计一个可以为 S4 类实现多种算法的函数的推荐模式是什么?
- javascript - 将元素 onclick 从一个数组移动到另一个数组。新数组对象中的内容为空/未复制?
- reactjs - reactjs数据映射,从服务器获取数据
- html - @ViewChild 返回未定义的 Angular 8
- android - 仪器测试(Espresso)在本地工作,但在 Gitlab CI 上不稳定
- c - 如何在我的 C 程序中运行另一个 C 程序?
- python - 在python中为逻辑回归设置确切的迭代次数
- angular - 角材料表排序无法正常工作
- javascript - ES 模块旧语法
- c++ - 有人可以为我澄清 C++ 中的运算符重载吗?