11

这可能是一个简单的问题,但我还没有找到解决它的方法。我想通过 ajax 调用从服务器(由 ASP.NET Web API 实现)下载 csv 文件:

$.ajax({
    type: "GET",
    accepts: "text/csv; charset=utf-8",
    url: "/api/employees",
    success: function (data) {
    }
});

我已经将 Accepts 标头放在上面的 jQuery ajax 中。但从提琴手,我看到:

在此处输入图像描述

Accepts 标头现在变为Accept: undefined. 如果我尝试输入:

    accepts: {
        csv: "text/csv; charset=utf-8"
    }

Accepts 标头现在变为:Accept: */*

在此处输入图像描述

所以我想这是让我的服务器返回 JSON 对象而不是 CSV 文件的要点。

如何在 jQuery ajax 中正确制作 Accepts Header?并在提琴手中看到应该是: Accept: text/csv

我正在使用 Chrome。

4

2 回答 2

14

尝试

$.ajax({
    headers: { 
        Accept : "text/csv; charset=utf-8",
        "Content-Type": "text/csv; charset=utf-8"
    }
...
于 2013-03-11T07:21:31.930 回答
4

虽然 dakait 的回答是正确的,但我会清理它并提供解释。

$.ajax({
  url: '/path',
  headers:{ 'Accept': 'text/csv',
            'Content-Type': 'text/csv' },
  ...

在上面的示例中,我们明确设置了两个标头。

我认为正在发生的事情是 jQuery 有自己的逻辑来处理 Accept 和 Content-Type 标头,基于accepts(不是 Accept)和 dataType 字段。

因此,如果 dataType 为空白(因为 csv 不是受支持的 dataType),即使您设置了 Accept 标头或接受参数,它也会抑制 Accept 标头。

它似乎不是一个直观的界面,但它适用于许多人。我认为如果文档更好,它会减少混乱。

于 2016-10-23T17:17:19.917 回答