我需要在表单中使用ajax。但似乎$ .ajax的成功功能,不支持文件。现在我想知道如何使用ajax,当我想要一些时间返回表单(当无效时)和一些时间返回流到客户端进行下载(当表单有效时)。我已经完成了谷歌搜索,似乎与$ .get它可能会工作。但我有形式,我必须使用帖子。任何人都可以帮我解决问题吗?非常感谢。
在下面的功能中,流不起作用。
$('#sendButton').click(function(e) {
e.preventDefault();
var temp = $("#mainForm").serialize();
$.ajax({
type: "POST",
data: temp,
url: 'main/',
success: function(data) {
...
}
});
});
my views.py:
def mainFunc(request):
if request.is_ajax():
form = mainForm(request.POST)
if request.method == 'POST':
if form.is_valid():
result = ""
string_to_return = webservice._result
file_to_send = ContentFile(string_to_return)
response = HttpResponse(file_to_send,'application/x-gzip')
response['Content-Length'] = file_to_send.size
response['Content-Disposition'] = 'attachment; filename="somefile.tar.gz"'
return response
else:
form = mainForm()
return render_to_response('main.html', RequestContext(request, {'form':form}))
else:
return render_to_response("ajax.html", {}, context_instance=RequestContext(request))
答案 0 :(得分:1)
您仍然无法将文件返回给ajax请求。自yesterday
以来,答案没有改变您可以做的是返回下载的网址并重定向用户或弹出一个新的窗口/标签。喜欢这个
$('#sendButton').click(function(e) {
e.preventDefault();
var temp = $("#mainForm").serialize();
$.ajax({
type: "POST",
data: temp,
url: 'main/',
success: function(data) {
# Option 1 - redirect
window.location = data;
# Option 2 - new window
window.open(data, '_blank');
window.focus();
}
});
});