Atigo Originalmente publicado no MX Studio em 2007.
Olá a todos. Neste texto iremos finalmente entrar na parte prática do Ajax, onde ensinarei a criar o objeto de requisição XMLHttp object que é a base de todo sistema ajax. Chega de conversa e vamos ao que interessa.
Antes porém de uma parte mais prática, se faz necessária uma explicação. Os navegadores Microsoft, por serem baseados em JScript, interpretam o objeto de requisição como um ActiveXObject(quem não lembra das janelinhas do IE avisando risco de segurança por causa de scripts), e os outros navegadores, por serem baseados em Javascript, interpretam o objeto como sendo um Objeto do núcleo da linguagem, fazendo com que a gente tenha que testar o tipo de navegador da pessoa para criarmos o objeto de forma que funcione em qualquer navegador compatível com a tecnologia.
Criando o Objeto em navegadores microsoft:
var objetoXMLHttp = false;
try {
objetoXMLHttp= new ActiveXObject(”Msxml2.XMLHTTP”);
} catch (e) {
try {
objetoXMLHttp = new ActiveXObject(”Microsoft.XMLHTTP”);
} catch (e2) {
objetoXMLHttp = false;
}
}
Msxml2.XMLHTTP – Navegadores microsoft mais atuais(IE5+, Jscript 5.0)
Microsoft.XMLHTTP – Navegadores microsoft mais antigos(IE4-)
Os navegadores Microsoft possuem duas versões diferentes do objeto, este código tenta criar primeiramente um objeto do tipo Msxm12.XMLHTTP, que é implanteado pelos navegadores Microsoft mais atuais e é mais comum. Se não obtiver sucesso ele tenta criar um objeto do tipo Microsoft.XMLHTTP, que é implantado por navegadores Microsoft mais antigos, meio raro de se encontrar mas um pouco de compatibilidade não mata ninguém. Caso não obtenha sucesso em nenhuma das tentativas, é sinal que o navegador não é Microsoft, e devemos ciar o objeto de outra forma:
objetoXMLHttp = new XMLHttpRequest();
Esse bloco de código cria o objeto compatível todos os outros navegadores que suportam o mesmo e não são Microsoft.
Agora que você já sabe as diferenças básicas entre o objeto entre os navegadores, vamos criar uma função que nos retorne o objeto compatível com qualquer navegador que suporte o mesmo:
function criarObjetoXMLHTTPRequest() {
var objetoXMLHttp;
/*@cc_on
@if (@_jscript_version >= 5)
try {
objetoXMLHttp = new ActiveXObject(”Msxml2.XMLHTTP”);
} catch (e) {
try {
objetoXMLHttp = new ActiveXObject(”Microsoft.XMLHTTP”);
} catch (e) {
objetoXMLHttp = false;
}
}
@else
objetoXMLHttp = false;
@end @*/
if (!objetoXMLHttp && typeof XMLHttpRequest != ‘undefined’) {
try {
objetoXMLHttp = new XMLHttpRequest();
} catch (e) {
objetoXMLHttp = false;
}
}
return objetoXMLHttp;
}
Uma parte do código requer um pouco de atenção extra, o bloco “/*@cc_on”, que ativa o suporte de compilação condicional. O código de compilação condicional deve estar sempre dentro de um comentário, isso permite que navegadores que não suportam compilação condicional possam ignorar esta parte do script, como compilação condicional é recurso exclusivo de JScript, somente navegadores IE irão ler esta parte do código. Isso torna o script compatível com todas as versões do IE que suportam o objeto e evita que navegadores baseados no Gecko possam interromper o script ao tentar criar um objeto existente somente no Internet Explorer.
Queria deixar claro que é necessário um pouco de conhecimento de Javascript para conseguir entender corretamente esta seqüência de textos.
OBS: Tratamento de exceções não é suportado em versões de Jscript inferiores a 5, mas foi usado um try/catch da mesma forma quando é detectada esta versão para evitar erros em navegadores atuais, e navegadores mais antigos irão ignorar o bloco try/catch e criar o objeto corretamente.
Por hoje é só, num próximo texto eu continuo no Ajax.
Abraço a todos
Estudante Universitário de Design Gráfico pela Universidade de Caxias do Sul, certificado em desenvolvimento Ajax pelo grupo Processor Alfamídia de Porto Alegre e acima de tudo Desenvolvedor Web.