w3schools formdata form example ejemplo data javascript ajax xmlhttprequest

javascript - formdata - XMLHttpRequest POST multipart/form-data



xmlhttprequest javascript example (6)

Deberá realizar una POST en un IFrame para que funcione, simplemente agregue un atributo de destino a su formulario, donde especificará la ID de IFrame. Algo como esto:

<form method="post" target="myiframe" action="handler.php"> ... </form> <iframe id="myiframe" style="display:none" />

Quiero usar XMLHttpRequest en JavaScript para PUBLICAR un formulario que incluya un elemento de entrada de tipo de archivo para poder evitar la actualización de la página y recuperar el XML útil.

Puedo enviar el formulario sin actualización de página, usando JavaScript para establecer el atributo de destino en el formulario a un iframe para MSIE o un objeto para Mozilla, pero esto tiene dos problemas. El problema menor es que el objetivo no es compatible con W3C (por eso lo configuro en JavaScript, no en XHTML). El principal problema es que el evento de carga no se dispara, al menos no en Mozilla en OS X Leopard. Además, XMLHttpRequest sería un código de respuesta más bonito porque los datos devueltos podrían ser XML, no limitados a XHTML como es el caso con iframe.

Enviar los resultados del formulario en HTTP que se ve así:

Content-Type: multipart/form-data;boundary=<boundary string> Content-Length: <length> --<boundary string> Content-Disposition: form-data, name="<input element name>" <input element value> --<boundary string> Content-Disposition: form-data, name=<input element name>"; filename="<input element value>" Content-Type: application/octet-stream <element body>

¿Cómo obtengo el método de envío del objeto XMLHttpRequest para duplicar la secuencia HTTP anterior?


No hay ninguna forma de acceder a un campo de entrada de archivo dentro de JavaScript, por lo que no hay una solución de solo javascript para la carga de archivos ajax.

Hay una solución alternativa como usar un iframe .

La otra opción sería usar algo como SWFUpload o Google Gears


No veo por qué iframe (uno invisible) implica XHTML y no CUALQUIER contenido. Si usa un iframe, puede establecer el evento onreadystatechange y esperar a que se complete. Luego podría usar frame.window.document.innerHTML (por favor, que alguien me corrija) para obtener el resultado de la cadena.

var lFrame = document.getElementById(''myframe''); lFrame.onreadystatechange = function() { if (lFrame.readyState == ''complete'') { // your frame is done, get the content... } };


Estoy confundido sobre el evento de carga que usted especificó, está en la página o en el iframe ?, la primera respuesta es correcta, no hay manera de hacerlo utilizando purely xmlhttprequest, si lo que quiere lograr es activar algún método una vez que la respuesta existe en iframe, simplemente verifique si ya tiene contenido o no usando DOM scripting, luego active el método.

para adjuntar el evento onload al iframe

if(window.attachEvent){ document.getElementById(iframe).attachEvent(''onload'', some_method); }else{ document.getElementById(iframe).addEventListener(''load'', some_method, false); }


Content-Disposition: form-data, name

Debe usar punto y coma, así: Content-Disposition: form-data; nombre


Puede construir la solicitud ''multipart / form-data'' usted mismo (lea más sobre esto en http://www.faqs.org/rfcs/rfc2388.html ) y luego use el método de send (es decir, xhr.send (your- multipart-form-data)). Del mismo modo, pero más fácil, en Firefox 4+ (también en Chrome 5+ y Safari 5+) puede usar la interfaz FormData que ayuda a construir dichas solicitudes. El método de send es bueno para el contenido de texto, pero si desea enviar datos binarios, como imágenes, puede hacerlo con la ayuda del método sendAsBinary que comenzó con Firefox 3.0. Para obtener más información sobre cómo enviar archivos a través de XMLHttpRequest , consulte http://blog.igstan.ro/2009/01/pure-javascript-file-upload.html .