2012-08-22 9 views
7

Quindi sto utilizzando il caricamento di file jquery in un'app per rails 3 e tutto funziona perfettamente, eccetto che in IE 9 cioè. Solo in IE9, quando provo a caricare un file, continuo a ricevere l'errore "Impossibile verificare csrf token" nella mia console. Ho installato Firebug lite per ispezionarlo e il token csrf corretto è corretto ed è nel posto giusto nel documento (e sì ho il mio tag <% = csrf_meta_tags%> nell'intestazione del file di layout). Non sei sicuro del motivo per cui lo fa solo in IE 9, qualcuno l'ha già visto prima?Impossibile verificare il token CSRF per un caricamento di file jQuery, solo IE 9, applicazione Rails 3

+0

capito che il problema è legato alla IE utilizzando caricamenti di trasporto iframe. Ho provato a cambiare l'opzione "forceIframeTransport" su true, e quindi il problema di cui sopra è stato replicato in Firefox e in altri browser non-IE. Ancora non sono sicuro di come aggiustarlo. Nel $ .ajaxSetup nel file jquery.iframe-transport.js, ho provato ad avvisare la risposta JSON, ma continuava a generare errori e non me lo permetteva. Quindi ho solo provato a "avvisare" il "$ (iframe [0] .body) .text()" (che tenta di analizzare in json, e ho ottenuto una risposta davvero strana. Quindi forse è un problema con json non valido, non il token csrf? – ggrillone

+3

Finalmente capito! Il problema era relativo a IE usando i caricamenti di trasporto di iframe invece dei caricamenti di file XHR (che usano Firefox, Chrome e Safari). Se un browser utilizza i caricamenti di trasporto di iframe, il plugin fa una chiamata a un metodo separato, che genera un iframe una nuova forma nel DOM. Questo nuovo modulo non includeva il token di autenticità csrf, quindi dovevo prendere il valore dall'altra forma e aggiungerlo al nuovo modulo prima che fosse inviato – ggrillone

+1

Per favore aggiungi la tua risposta e contrassegnala come accettata – zykadelic

risposta

20

Ho avuto lo stesso problema e il commento sopra dell'OP mi ha aiutato a trovare la risposta. Ecco che cosa ha funzionato per me:

$('#fileupload').fileupload({ 
    ... other options 
    formData: [ 
    { name: 'authenticity_token', value: $('meta[name="csrf-token"]').attr('content') } 
    ] 
}); 

Si noti che il file di layout (application.html.erb in Rails 3.2) dovrebbe avere il seguente:

<%= csrf_meta_tags %> 
+0

Grazie Santosh, la tua soluzione funziona perfettamente. – datnt