UPLOAD com AJAX é possível?

Não considere isso um artigo, isso é um desafio. Eu desafio a alguém apresentar uma maneira de fazer upload de arquivos com AJAX! Mas apenas AJAX! Isso é mesmo possível? Por que não seria? O Gmail faz isso? Quem disse que faz? Nesse desafio eu vou tentar mostrar por que não é possível (com os navegadores de hoje) e quais são as artimanhas criadas para dar a ilusão que isso é possível...

Por | @oficinadanet Programação
Primeiro vamos tentar definir o que é e o que não é AJAX.
O Asynchronous Javascript And XML é uma metodologia para fazer requisições ao servidor sem a necessidade de recarregar novamente a página. Junte a isso umas artimanhas com XML e um punhado de código e você terá um sistema web que se parece aos sistemas desktop.
Quem faz essa grande maravilha é o todo poderoso JavaScript, que envia uma cabeçalho HTTP para o servidor, recepciona sua resposta e nos permite trabalhar com essas novas informações no corpo da página já carregada. Isso é AJAX.

Através do JavaScript você pode preparar essa requisição HTTP com variáveis ou não, em POST ou GET, com variáveis dos formulário ou do próprio código JavaScript, etc... Mas o grande problema é para enviar arquivos!

Para enviar arquivos, é necessário que o JavaScript leia todo o arquivo e envie na requisição HTTP, e isso até que é possível, mas a maioria dos browser negam o acesso do JavaScript aos arquivos por questões de segurança(veja isso: http://www.mozilla.org/projects/security/components/jssec.html). Vejam nesse link (http://www.captain.at/ajax-file-upload.php) o melhor método de fazer o upload com AJAX que eu já vi, porém é necessário mexer nas configurações de segurança do Mozilla e é claro que não temos como pedir para que os usuários façam isso nos seus navegadores. :(

Mas aí você pode está pensando: "Mas eu já vi upload com AJAX! Isso é possível!", "O Gmail faz Upload com AJAX então é possível!", etc...

Então vamos para a realidade nua e crua!
O que o Gmail faz e que a maioria das pessoas fazem para dar a impressão de Upload com AJAX é um método muito simples. Eles criam o Iframe sem bordas, com largura igual a zero, de modo que o Iframe não seja visível. Depois submetem normalmente (sem AJAX) o formulário que envia o arquivo com o Iframe como destino, depois eles capturam o conteúdo do IFrame para uma variável do JavaScript e daí por diante trabalham como trabalhariam caso fosse uma requisição com AJAX.

Moral da história: a página não é descarregada, você vê apenas o resultado e (se o programdor for esperto) nem o iframe aparece no código. :D

Mas, no final das contas, isso é AJAX?
Para mim, a resposta é não.
A requisição não é assícrona, já que a página é carregada pelo navegador, apesar do usuário não ver.

Vejam alguns links de programadores que fizeram isso (conscientemente):
http://www.air4web.com/files/upload/
http://elmicoxcodes.blogspot.com/2007/03/asynchronous-upload-like-ajax-1.html

Eu sinceramente espero que alguém consiga me provar o contrário, e mostre aqui uma forma de utilizar apenas (eu disse APENAS) AJAX para enviar o arquivo. Está lançado o desafio! Ficarei feliz em postar aqui mesmo os créditos de quem achar a solução.

Abraços.


Mais sobre:
Share Tweet
Recomendado
Comentários
Carregar comentários
Destaquesver tudo

Siga nossas contas no Twitter