sábado, 24 de fevereiro de 2007

Aventuras e soluções - Javascript

Ainda estou muito longe de programar de forma eficiente e levando em conta todas as exigências de um site eficiente e politicamente correto: regras de acessibilidade, normas, etc... Mas faço o possível para chegar cada vez mais próximo disso.

O caso é que o famigerado Ajax NÃO é um padrão, e por isso mesmo nunca fiz questão de ir muito atrás para aprender. Porém resolvi usá-lo num site meu, como um mimo pra mim mesmo (nada que fosse ficar exposto à navegação).

Dá-lhe eu a correr atrás de um tutorial. Encontrei alguns, mas mesmo assim ainda incompletos, sem muita informação técnica como por exemplo manipulação de headers, mas dava pro gasto.

Não conheço um programador que não tenha uma pasta "experiências" ou "laboratório" destinada a fazer testes básicos com a tecnologia que se quer implementar, para depois mandar ver em sua aplicação principal. Comigo não é diferente. Criei uma página apenas com fins de teste, e pra variar deu errado.

Tentava daqui e de lá, trancrevi os exemplos dos tutoriais, googlei, e nada. Os exemplos dos tutoriais dava certo, mas o meu não. Why?

Mandei os códigos para um amigo mais experiente, o Júlio, dar uma olhada. Tenho que agradecer a ele por ter gasto seu tempo ajudando esta pobre mula cósmica que esta escrevendo este artigo.

O galho estava na declaração do objeto XMLHttpRequest. A declaração estava dentro de uma função, e quando chegava no trecho
myvar.onreadystatechange = umaOutraFunçãoDeclaradaAbaixo();
dava galho.

Coloquei vários alerts para fazer o debug e chegamos a uma solução: fazer a instanciação do objeto XMLHttpRequest ANTES de iniciar as funções.

O erro que aparecia era que as propriedades myObject.status e myObject.readyState não estavam definidas ("undefined").

Foi interessante notar que nos exemplo que transcrevi dos tutoriais estes erros também apareciam quando se colocava um alert para debug.

Javascript nunca foi meu forte, mas depois de dar uma lida mais aprofundada vi que há uma outra possibilidade mais interessante, eficiente e correta do que o Ajax, o E4X.

Não vou me ater a detalhes aqui, mas o E4X é um acrônimo para ECMAScript For XML. ECMAScript é o nome oficial do Javascript.

Pois bem, a possibilidade interessante é trabalhar com a biblioteca DOM do PHP, já citada aqui, e usar os métodos do E4X. Além de ser um padrão (o que o Ajax não é), o código fica muito mais limpo e inteligível.

A biblioteca DOM permite salvar em um arquivo ou retornar uma string tanto em XML quanto em HTML. E o E4X dá o tratamento à informação, com as mesmas possibilidades do Ajax e de quebra fica mais fácil manter um código acessível (sem aqueles links que não mandam pra lugar nenhum) e dentro das normas.

A infelicidade, como sempre, fica por conta da Microsoft que até o IE 6 não dava suporte ao E4X. Não sei se o IE 7 o suporta.

Enfim, pra finalizar, aí está o link da ECMA (European Computers Manufacturers Association) que detem normas de um porrilhão de coisas (quer saber quais são as normas e regras de como se grava um CD ou uma fita K7? Eles tem isso) e a promessa de logo publicar um tutozinho de como trabalhar com o E4X.
-----------
keepReading

Nenhum comentário:

Postar um comentário