2009-07-02 14 views
15

Per una delle nostre richieste Ajax (con una risposta .json) alcuni dei nostri clienti si sono lamentati del fatto che stanno visualizzando un prompt "Download file" che chiede all'utente di scaricare la risposta .json . Sono sconcertato perché considerando che questa è una risposta xhr, questo non dovrebbe mai accadere. Qualcuno ha visto questo?json xhr response apre una finestra popup di download

Grazie

+0

perché aggiungi .json come estensioni di file? penso che non si possa fare a meno che non si imposti il ​​browser per fare cose specifiche per il file .json (in FF vai alle opzioni) – nightingale2k1

risposta

11

provare a specificare un tipo MIME di "text/plain" nella risposta. o semplicemente rilasciare l'estensione ".json" dall'URL (prova .txt o .js, per esempio)

+0

e assicurati prima di specificare che non stai impostando le intestazioni in nessun'altra parte del tuo codice (es. , specificando il tipo mime come qualcosa di diverso da text/plain). – jellyfishtree

+0

Questa risposta presuppone che tu abbia il controllo sulla risposta. Che ne dici di chiamare un WS di terze parti che risponde con JSON, con un tipo di contenuto impostato su, dio vieta, JSON? – phtrivier

+0

Sì, la modifica di ContentType in text/html (dall'applicazione/json) ha funzionato per me. Ho scritto un post sul blog con ulteriori dettagli: http://blog.degree.no/2012/09/jquery-json-ie8ie9-treats-response-as-downloadable-file/ – Andreas

-3

Rilasciare .json e impostare il tipo di contenuto come text/html. IE non sa che tipo di file si sta inviando, quindi offre il download. Sa cosa fare con text/html :)

+1

No. Non servire json come text/html. http://jibbering.com/blog/?p=514 – Cheeso

3

Non sono sicuro se hai trovato una soluzione, ma ho avuto un problema simile in cui IE ha provato a scaricare qualsiasi risposta JS. Per risolvere il problema, ho dovuto garantire che format.html appare sopra format.js nel blocco di risposta:

def index 

    # ... 

    respond_to do |format| 
    # html must be above js, otherwise IE will try to download the JS 
    format.html 
    format.js 
    end 
end 

Spero che questo aiuti.

+0

Questa soluzione ha funzionato per me. Nessuna idea del perché (altri browser funzionavano bene). –

+0

Intestazione IE Accept: 'Accetta: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, */*' Intestazione di Firefox Accept: 'Accept: text/html, application /xhtml+xml,application/xml;q=0.9, */*; q = 0.8' Non so cosa sia ancora q = significa, ma scommetto che ha qualcosa a che fare con quanto vuole il contenuto di quel particolare tipo . –

16

Per le persone che utilizzano ASP MVC e hanno lo stesso problema con IE, utilizzare questo al ritorno la vostra risposta:

return Json(result, "text/plain"); 

Edit: il tipo standard è: "application/json", ma non funziona con IE. usare text/html è pericoloso.

+0

Risposta migliore di @jrharshath, perché text/plain non è tecnicamente corretto. È un trucco grossolano per le vecchie versioni di IE. –

1

Sto utilizzando l'uploader file Ajax QQ e ho scoperto che avevo bisogno di impostare il tipo di contenuto su "text/json" perché funzionasse correttamente.

+0

Ho provato questo ma non ha funzionato per me. IE7 tenta di scaricare il file php specificato come endpoint. –