2011-09-29 19 views
5

Dopo lo studio di una intera giornata di & & cercando, ho finalmente rinunciare caricare file da puro AJAX (ps: questo post How can I upload files asynchronously with JQuery? sepolto la mia ultima speranza)Perché non posso caricare i file in modo asincrono?

La mia domanda potrebbe essere un po 'privo di senso, ma ho ancora voglia di sapere perché ajax (o XMLHttpRequest) non può gestire questo? perché i file non possono essere trasferiti come il vero httprequest?

+2

Perché JavaScript non può leggere file locali, almeno non senza l'aiuto di alcune API HTML 5 magiche. –

+0

@PeKKa Ciò significa che la richiesta AJAX (con js) e la richiesta Form (con html) sono cose completamente diverse? Anche per i browser? – rhapsodyn

+2

non proprio - puoi costruire qualsiasi tipo di richiesta usando Ajax. Sta solo accedendo al file locale che non è possibile in JavaScript per motivi di sicurezza. –

risposta

6

Javascript non può leggere i file locali per motivi di sicurezza, quindi non possiamo inviare i dati utilizzando AJAX.

Tuttavia, è possibile pubblicare un modulo HTML standard e impostare il target del modulo come iframe invisibile sulla pagina. Questo iframe può quindi utilizzare il codice lato server per gestire il caricamento.

Se il motivo per utilizzare AJAX è perché desideri una barra di avanzamento mentre il caricamento del file, utilizzando questo metodo è possibile utilizzare una variabile statica sul lato server per archiviare l'avanzamento del caricamento del file, quindi utilizzare AJAX per effettuare una richiesta semplice e temporanea su un'altra pagina HTTP che restituisce solo l'avanzamento del caricamento.

2

Proprio come una risposta aggiornata nel caso in cui qualcuno lo controlli, XMLHttpRequest livello 2 supporta l'input di input AJAX.

Supporto browser:

http://caniuse.com/xhr2

Si utilizza l'oggetto formdata Javascript.

How to send FormData objects with Ajax-requests in jQuery?

Non dimenticare di spegnere processData e contentType se si sta facendo questo.

var fd = new FormData();  
fd.append('file', input.files[0]); 

$.ajax({ 
    url: 'http://example.com/script.php', 
    data: fd, 
    processData: false, 
    contentType: false, 
    type: 'POST', 
    success: function(data){ 
    alert(data); 
    } 
}); 
Problemi correlati