2013-03-11 7 views
7

Questa potrebbe essere una domanda semplice ma non ho ancora trovato il modo di risolverlo. Vorrei scaricare il file csv dal server (implementato da ASP.NET Web API) per chiamata AJAX:Come aggiungere Accept Header con text/csv in jQuery ajax

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

ho messo l'intestazione ha accettato in jQuery Ajax come sopra. Ma da violinista, vedo:

enter image description here

Il Accetta intestazione ora si gira verso Accept: undefined. Se provo a mettere:

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

Il Accetta Header ora si rivolge a: Accept: */*

enter image description here

Quindi credo che è il punto principale per fare il mio server restituisce oggetto JSON, piuttosto che file CSV.

Come posso fare in modo che Accepts Header in jQuery ajax sia impostato correttamente? e vedere nel violinista dovrebbe essere: Accept: text/csv

Sto usando Chrome.

risposta

6

provare

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

Grazie, funziona. Ma non capisco perché due opzioni che ho dato non funzionassero –

3

Anche se la risposta di dakait è corretta, io pulisco in su e offrire una spiegazione.

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

Nell'esempio precedente, impostiamo esplicitamente le due intestazioni.

Penso che ciò che sta accadendo sia che jQuery abbia la propria logica per gestire le intestazioni Accept e Content-Type, in base ai campi accepts (non Accept) e dataType.

Quindi, se il dataType è vuoto, (che sarebbe poiché csv non è un dataType supportato), sta sopprimendo l'intestazione Accept anche se si imposta l'intestazione Accept o accetta param.

Non sembra essere un'interfaccia intuitiva, ma funziona bene per molte persone. Penso che se la documentazione fosse migliore causerebbe meno confusione.