1
我想要一個Django創建的表單爲jQuery/Ajax提交;如果成功,我想要下載一個文件,並且如果表單無效,我希望返回我的Django表單。Django jQuery Ajax表單:下載文件或渲染錯誤的表格
我試圖 「劫持」 Django的形式一樣,把它變成一個jQuery/Ajax的事情: (javascript代碼)
form.submit(function(e) {
e.preventDefault();
$.ajax({
data: form.serialize(), // form data
type: form.attr('method'),
url: form.attr('action'),
success: function(data, textStatus, jqXHR) {
var ctype = jqXHR.getResponseHeader('Content-Type');
if (ctype == 'text/html') {
$('#div_where_my_form_is').html(data);
}
else if (ctype == 'text/csv') {
// ???? my problem is here
}
}
});
});
我的Django視圖代碼是這樣的:
# (if the form is invalid I return it (simple template containing only the form))
# if valid:
response = HttpResponse(mimetype='text/csv')
response['Content-Disposition'] = 'attachment; filename=filename.csv'
writer = csv.writer(response, delimiter=';')
writer.writerow(['...stuff written here...'])
return response
所以我的文件是一個即時創建的CSV文件,這可能是重要的注意事項。
看看我的jQuery代碼如何使用jqXHR對象來檢查返回的內容類型(任何更好的方法都是歡迎的)。我的問題是,如果成功,我不能讓jQuery明白這是一個正在返回的文件,應該下載。那可能嗎? jQuery只是將數據視爲文本。
可能的解決方法:
- 使第一AJAX調用來檢查的形式,如果它是確定做一個「正常」(非Ajax)調用下載文件
- 忘了阿賈克斯,並在無效形式的情況下,返回錯誤頁面