11

これは簡単な質問かもしれませんが、私はまだそれを整理する方法を見つけていません。ajax呼び出しでサーバー(ASP.NET Web APIによって実装)からcsvファイルをダウンロードしたい:

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

上記のように、AcceptsヘッダーをjQueryajaxに配置しました。しかし、フィドルから、私は見る:

ここに画像の説明を入力してください

Acceptsヘッダーがに変わりAccept: undefinedます。私が入れようとすると:

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

Acceptsヘッダーは次のようになります。Accept: */*

ここに画像の説明を入力してください

したがって、サーバーがCSVファイルではなくJSONオブジェクトを返すようにするための主なポイントだと思います。

jQuery ajaxでAcceptsヘッダーを正しく作成するにはどうすればよいですか?そしてフィドラーで見るべきである: 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' },
  ...

上記の例では、2つのヘッダーを明示的に設定しています。

何が起こっているのかというと、jQueryには、accepts(Acceptではなく)フィールドとdataTypeフィールドに基づいて、AcceptヘッダーとContent-Typeヘッダーを処理する独自のロジックがあるということです。

したがって、dataTypeが空白の場合(csvはサポートされているdataTypeではないため)、Acceptヘッダーを設定したりparamを受け入れたりしても、Acceptヘッダーが抑制されます。

直感的なインターフェイスではないようですが、多くの人にとってはうまく機能します。ドキュメントが優れていれば、混乱が少なくなると思います。

于 2016-10-23T17:17:19.917 に答える