Я хочу отправить json на сервер и получить CSV.
У меня есть Ajax вот так
var data = {"data":1}
$.ajax({
type: "POST",
url: "api/export_csv",
data:JSON.stringify(data),
// dataType: "JSON", // if I comment out here it works.
success: function(response) {
console.log("success");
DownloadCsv(response);
}
});
//parse response to CSV
const DownloadCsv = (function() {
const a = document.createElement("a");
document.body.appendChild(a);
a.style = "display: none";
return function(data, fileName) {
const blob = new Blob([data], {type: "octet/stream"}),
url = window.URL.createObjectURL(blob);
a.href = url;
a.download = fileName;
a.click();
window.URL.revokeObjectURL(url);
};
}());
Затем в django view.py
@api_view(['POST', 'GET'])
def export_csv_view(request):
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=somefilename.csv'
writer = csv.writer(response)
writer.writerow(['First row', 'A', 'B', 'C', '"Testing"', "Here's a quote"])
return response
Очень странно. Если я закомментирую dataType: "JSON"
, он будет работать, но если я добавлю эту строку, он не будет работать без ошибок (javascript консоль).
Проблема решена. Я использую contentType вместо datatype.
contentType: 'application/JSON',
//dataType: "JSON",
Я неправильно их понял.
contentType
для отправки. dataType
для получения