2013-05-15 9 views
6

Sto usando ajax per il mio sito web. Ho utilizzato con successo jQuery.ajax() per caricare in modo asincrono il file sul server. Sto usando Dajax e Dajaxice quindi ho intenzione di utilizzare queste applicazioni anche per il caricamento di file. Ho provato l'esempio this. Funziona bene. Ma se aggiungo il campo file nel mio modulo html, non invia file al server. La mia forma html sembracome inviare i dati dei file usando Dajaxice?

<form id="myform" action="/file/" method="post" enctype="multipart/form-data"> 
<div style='display:none'><input type='hidden' name='csrfmiddlewaretoken' value='AaSmyBEwQLSD3YghRAD9Cf2uxEjzESUe' /></div> 
<p><label for="id_docfile">Select a file</label> max. 42 megabytes</p> 
<p><input type="file" name="docfile" id="id_docfile" /></p> 
<p><input type="submit" value="Upload" /></p> 
</form> 

Questa domanda è stato chiesto in molti posto ma mai risposto.

+0

Qualcuno ha saputo rispondere a questa/trovare una soluzione? – scriptdiddy

+0

@scriptdiddy Non ancora! – Aryaveer

risposta

1

Afaik non è attualmente disponibile in dajax/dajaxice il provisioning per caricare i file.

Ho usato dajax in alcuni progetti e ho aggirato questo usando blueimp/jquery-file-upload e una vista di django che accetta un POST del file di upload e restituisce una stringa JSON al client.

Questa è una soluzione meno che perfetta, non ultimo perché il pulsante jquery-file-upload è in stile diverso dai normali elementi di forma html, è possibile disegnare l'intero modulo usando jQuery-ui, anche se questo è un sacco di ulteriori lavoro.

Entrambi, dwr che è praticamente dajax per Java, e tasty pie per django do offrono il caricamento di file, quindi in teoria dovrebbe essere possibile implementarlo.

Sono felice di pubblicare un campione della mia soluzione ajax se qualcuno li trovasse utili.

1

Ho anche affrontato questo problema di recente. Quindi, ho scavato un po 'e ho scoperto alcune risposte.

Sta funzionando bene. Ma se aggiungo il campo file nel mio modulo html, non invia file al server.

C'è il metodo serialize() utilizzato nell'esempio di documento. Ma secondo lo jQuery doc:

I dati dagli elementi di selezione file non sono serializzati.

Inoltre, non esiste un modo chiaro per ottenere il caricamento di un file jax, poiché JS non ha accesso all'esterno del browser client. Quindi, non penso che sia possibile utilizzare dajaxice.

L'hack più semplice, che ho trovato è di inviare modulo per l'iframe invisibile utilizzando target opzione:

<form method='POST' action='/upload' enctype='multipart/form-data' target='submit-iframe'>

così, solo l'iframe sarà aggiornata. Usando js tu puoi ottenere dati da esso catturando l'evento load().

processo

più dettagliate descritto here

+1

Creare un iframe e pubblicare un modulo da dentro è il modo in cui funzionano tutte le soluzioni Ajax/Javascript non flash, dwr fa la stessa cosa, vedi: http://directwebremoting.org/dwr-demo/simple/upload.html .Questo, unito al codice python per deserializzare (come usato in una gustosa torta), il file alla fine sarebbe un'utile aggiunta a dajaxice. –

Problemi correlati