2013-03-11 54 views
7

这可能是一个简单的问题,但我还没有找到解决的办法。我想通过Ajax调用从服务器下载(通过的ASP.NET Web API实现)CSV文件:如何在jQuery中添加带有text/csv的Accept Header ajax

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

我已经把jQuery的阿贾克斯接受头部像上面。但是,从提琴手,我看到:

enter image description here

的接受头,现在变成Accept: undefined。如果我试图把:

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

的接受头,现在变成:Accept: */*

enter image description here

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

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

我正在使用Chrome。

回答

6

尝试

$.ajax({ 
    headers: { 
     Accept : "text/csv; charset=utf-8", 
     "Content-Type": "text/csv; charset=utf-8" 
    } 
... 
+5

谢谢,它的工作原理。但我不明白为什么我给出的两个选项都不起作用 – 2013-03-11 07:47:38

3

虽然dakait的答案是正确的,我会清理干净,并提供一个解释。

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

在上面的例子中,我们明确地设置两个头。

我认为正在发生的事情是,jQuery有它自己的逻辑来处理接受和内容类型标头,基于accepts(不接受)和dataType字段。因此,如果dataType为空,(因为csv不是受支持的数据类型),即使设置了Accept标头或接受参数,也会抑制Accept标头。

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

相关问题