Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Vagabondis

Erro no Ajax (Não Implementado)!

Recommended Posts

Galera,

 

Eu peguei um código bem simples de como implementar Ajax. Testei sem problemas e de repente começou a apresentar um determinado erro. A mensagem de erro fala o seguinte:

 

Caracter: 4

Linha: 23

Erro: Não Implementado

 

Nesta linha 24, tenho o código: req.open("GET",url,true);

Segue abaixo o código completo!

 

[ajax.js]

function pesquisa(valor) {
url="autocomplete.asp?valor="+valor;
ajax(url);
if(valor == "")
document.getElementById('autocomplete_outros').style.visibility = 'hidden';
}

function ajax(url) {
req = null;

// Procura por um objeto nativo (Mozilla/Safari)
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange();
req.open("GET",url,true);
req.send(null);

// Procura por uma versão ActiveX (IE)
} else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
if (req) {
req.onreadystatechange = processReqChange();
req.open("GET",url,true);
req.send();
}
}
}

function processReqChange() {
// apenas quando o estado for "completado"
if (req.readyState == 4) {
// apenas se o servidor retornar "OK"
if (req.status ==200) {
document.getElementById('autocomplete_outros').innerHTML = req.responseText;
document.getElementById('autocomplete_outros').style.visibility = 'visible';
} else {
alert("Houve um problema ao obter os dados:n" + req.statusText);
}
}
}

-----------------------------------------------------------------------------------

Post Mesclado

-----------------------------------------------------------------------------------

 

O que me intriga é que a execução do código está entrando no if (window.XMLHttpRequest) e não no else if (window.ActiveXObject), quando estou no Internet Explorer (IE7).

 

Eu acho que deveria entrar no segundo IF e não no primeiro, estou certo ou errado?

 

-----------------------------------------------------------------------------------

Post Mesclado

-----------------------------------------------------------------------------------

 

Eu percebi que quando eu executo a página no IE6, o objeto criado é o Msxml2.XMLHTTP

No IE7 ele se comporta como se fosse um browser do tipo Mozilla/Safari...

 

Executando a página no IE6 outro erro vem a tona que é na linha onde se lê req.open("GET",url,true);

 

-----------------------------------------------------------------------------------

Post Mesclado

-----------------------------------------------------------------------------------

 

Bom,

 

Eu identifiquei que na linha onde se lê req.onreadystatechange = processReqChange(); a existência do parenteses foi o motivo do nõa funcionamento do código. Ao removê-los, o código foi executado sem problemas. Eu não sabia desse detalhe.

 

Pelo que eu entendi, quando se chama uma função com parênteses, significa que deve ter algum parâmetro ou a função irá retornar algo. Não estou certo disso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

req.onreadystatechange espera uma referencia a uma função, no seu exemplo você estava chamando-a (ao invés de referencia-la).

 

Como javascript é muito dinamico, este tipo de operação não gera erros de execução, um dos motivos é que a função processReqChange poderia retornar uma referencia a outra função, ela mesmo ou qualquer coisa que desse na sua telha!

 

Ah detalhe, o IE7 implementou o objeto XMLHttpRequest como nativo, mantendo também, apenas para compatibilidade, o objeto antigo em ActiveX.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entendi a questão do onreadystatechange!

Sobre o XMLHttpRequest, eu dei uma lida e vi que o IE7 implementou ele nativamente mesmo, como você explicou!

Valews pela ajuda!

 

Consegui fazer meu AutoComplete. Está funcional, agora só falta caprichar no visual. Em anexo a este tópico tem um arquivo chamado AutoComplete.zip. Nele existem 03 arquivos:ajax.js - contêm as funcções JavaScript utilizadas nas páginas autocomplete.asp e abrirchamado.asp

autocomplete.asp - programação que obtem os dados no banco de dados

abrirchamado.asp - página utilizada pelo usuário normal (camada de visualização)

AutoComplete.js - tentativa de organziar as funções do arquivo ajax.js como se fosse uma classe

Espero ajudar alguém que precise fazer algo parecido.

 

Obrigado!

 

ANEXO

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.