我通过AJAX得到2个日期,开始和结束日期。我处理数据b / w那两个日期,生成一个报告,然后返回一个HttpResponse。 PDF报告现在保存在我的主项目目录中。现在我在AJAX中得到回复。那么,现在我应该如何处理成功函数中的响应,从服务器发回并打开PDF文件。
感谢。
的jQuery
$(function() {
$("#report_submit").click(function(){
$.ajax({
type : "POST",
url: "/reports/",
data : { 'start_date' : $("#startDate").val() , 'end_date' : $("#endDate").val() },
success : function(result){
},
error : function(result){
}
});
});
});
Django查看代码
def generate_report(request):
ctx = {}
if request.is_ajax():
if request.POST.has_key('start_date'):
start_date = datetime.strptime(request.POST[ 'start_date'] , '%m/%d/%Y')
end_date = datetime.strptime(request.POST[ 'end_date'] , '%m/%d/%Y')
......
# PDF GENERATED in MAIN PROJECT DIRECTORY
with open(os.path.join(os.path.dirname(__file__),'../../../../gui','Report.pdf')) as pdf:
response = HttpResponse(pdf.read(), content_type='application/pdf')
response['Content-Disposition'] = 'inline;filename=Report.pdf'
return response # so, now when I send a response back, how should I process it in AJAX success function?
pdf.closed
return render(request, 'generate_report/reports.html', ctx)
答案 0 :(得分:1)
不要尝试在Ajax响应中发送它。相反,让您的视图生成PDF的唯一URL,然后让JS将浏览器重定向到该URL:
视图:
return HttpResponse(json.dumps({'url': my_url})
JS:
$.ajax({
type : "POST",
dataType: "json",
url: "/reports/",
data : { 'start_date' : $("#startDate").val() , 'end_date' : $("#endDate").val() },
success : function(result){
var url = result['url'];
window.location = url;
},
答案 1 :(得分:0)
此问题已在以下问题中讨论过......您可能需要使用jquery插件进行文件下载,请不要忘记在响应中设置cookie。
PDF file download through XHR Request
您可能需要为文件下载添加javascript文件,并使用以下代码生成对服务器的请求。
$.fileDownload(urlll,{
successCallback: function (url)
{
//success code here
},
failCallback: function (html, url)
{
//error code here
}
});
在服务器端,在响应中添加标头等,在响应对象中执行以下操作。即
aResponse.addCookie(cookie);
我希望你能解决问题,也可以帮助别人。“悬挂指针”
答案 2 :(得分:0)
最简单的解决方案是在“成功”回调中调用window.open(pdf_url)
,其中pdf_url是生成的pdf报告的链接(您需要将其传递给响应)。