Avete fatto venire la curiosità anche a me… Provate un po' con questo codice:
Il nodo centrale della questione è il costruttore FormData, che dovrebbe funzionare su IE a partire dalla versione 10. Il resto è comunissimo javascript...codice:<!doctype html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Upload via ajax</title> <script type="text/javascript"> function switchXHRState () { switch (this.readyState) { case 0: console.log("open() has not been called yet."); break; case 1: console.log("send() has not been called yet."); break; case 2: console.log("send() has been called, headers and status are available."); break; case 3: console.log("Downloading, responseText holds the partial data."); break; case 4: console.log("Complete!"); alert(this.responseText); } } function ajaxPost (oForm) { if (!window.FormData) { return true; } var oReq = new XMLHttpRequest(); // Upload via ajax supportato; tolgo ?noajax=1 dall'attributo action oReq.open("POST", oForm.getAttribute("action").replace(/\?.*$/, ""), true); oReq.onreadystatechange = switchXHRState; oReq.send(new FormData(oForm)); return false; } </script> </head> <body> <form name="mioForm" action="invio.php?noajax=1" target="_blank" method="post" enctype="multipart/form-data" onsubmit="return ajaxPost(this);"> <input type="file" name="mioFile" /> <input type="text" name="mioText" value="testo di prova"> <input type="submit" value="Invia"></p> </form> </body> </html>
In ogni caso lo script è costruito in maniera tale che se FormData non è supportato viene aggiunta la stringa "?noajax=1" all'action del form e questo viene inviato comunque in una nuova finestra/scheda (di modo da consentire comunque di non abbandonare la pagina).

Rispondi quotando