尝试通过视图返回文件时遇到问题。
工作案例:用户提交表单,我从这些值中实例化一个 excel 文件并将其返回给用户。提交后,用户收到一个弹出窗口,邀请他下载文件。没问题。
不工作的情况:用户从 jstree 中选择值并使用 ajax 提交它们。我再次实例化一个 excel 文件并返回它。然而,尽管一切都很好(没有服务器错误,在 ajax 中触发了成功函数),但什么也没有发生。该文件是这样创建的:
response = HttpResponse(content_type='application/ms-excel')
response['Content-Disposition'] = 'attachment; filename="export.xls"'
response = comparaison(response, wb, ws_same, ws_diff, tree_left, tree_right)
wb.save(response)
return response
在第一种情况下很好,但在第二种情况下不行。
我还尝试通过将文件保存在服务器上一小段时间并以这种方式将用户重定向到其位置来找到解决方法。
wb.save('export.xls')
return redirect(path_to_export_xls)
它也没有给出错误,但什么也没有触发。我不知道我错过了什么,我看到的唯一区别是在第二种情况下,文件不是从同步提交后生成的,但我不知道为什么它应该是一个问题。
提前感谢您的任何建议。
PS:这里是ajax代码。
`$('#button_compare').on('click', function () {
var raw_left = jstreeDiv.jstree(true).get_checked(true),
raw_right = jstreeCreate.jstree(true).get_checked(true),
tree_left = [],
tree_right = [];
for(var i = 0; i<raw_left.length ; i++){
tree_left.push(raw_left[i].li_attr['data-id']);
}
for(var i = 0; i<raw_right.length; i++){
tree_right.push(raw_right[i].li_attr['data-id']);
}
$.ajax({
url: '../Comparer/',
type: 'POST',
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
},
data: {
'tree_left': JSON.stringify(tree_left),
'tree_right': JSON.stringify(tree_right)
},
/*
success:function(response){
alert('OK');
},
error:function (xhr, status, error) {
return false ;
}
*/
});
});
`