繁体   English   中英

Django 不返回带有 dataType 的 ajax 响应:“JSON”

[英]Django doesn't return ajax response with dataType : "JSON"

我想将 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 而不是数据类型。

contentType: 'application/JSON', 
//dataType: "JSON", 

我误解了这些。

contentType用于发送。 dataType用于接收

尝试更改行:

response = HttpResponse(content_type='text/csv')

response = HttpResponse(content_type='application/json')

正如evolutionxbox 正确指出的那样。

问题解决了。 我使用contentType而不是datatype

contentType: 'application/JSON', 
//dataType: "JSON", 
I misunderstood these.

contentType用于发送。 dataType用于接收

但是我发现如果我只使用dataType: "JSON" ,django 期望发送和接收数据都是 JSON。

所以很混乱。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM