Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal.. alguem sabe o porque na primeira vez a funcao nao funciona??
segue o codigo
var resultado;var req;function inicia_ajax() { req = new ActiveXObject("Msxml2.XMLHTTP");}function existe_produtos () { inicia_ajax(); req.open("GET", "existe_produtos.php?qualquer="+Math.ceil(Math.random() * 100000),true); req.onreadystatechange = function() { if (req.readyState == 4 && req.status == 200) { resultado = req.responseText; } } req.send(null); return(resultado);}e depois tenho um botao que ao clicar esta assim alert(existe_produtos()); só que no primeiro clique vem undefined.. e a partir do segundo já vem a resposta certa... porque será??
já coloquei o return dentro do if.. mas aí sempre fica dando undefined no alert do botão.....>
Pessoal.. alguem sabe o porque na primeira vez a funcao nao funciona??
segue o codigo
var resultado;var req;function inicia_ajax() { req = new ActiveXObject("Msxml2.XMLHTTP");}function existe_produtos () { inicia_ajax(); req.open("GET", "existe_produtos.php?qualquer="+Math.ceil(Math.random() * 100000),true); req.onreadystatechange = function() { if (req.readyState == 4 && req.status == 200) { resultado = req.responseText; } } req.send(null); return(resultado);}e depois tenho um botao que ao clicar esta assim alert(existe_produtos()); só que no primeiro clique vem undefined.. e a partir do segundo já vem a resposta certa... porque será??já coloquei o return dentro do if.. mas aí sempre fica dando undefined no alert do botão.....
Responsendo a sua pergunta:
O porque esta na forma como você chama o metodo open do objeto XMLHTTPREQUEST. O false no final, faz com que a chamada seja assíncrona, ou seja, o script não espera a consluão da chamada open para continuar sua executação, executando então o treixo return antes que a variável resultado tenha seu conteúdo indexado.
vou testar amanha colocando false para verificar....sobre funcionar apenas no IE... eh que é um sistema em PHP para rodar em Palm com Windows mobile.. por isso nao me preocupei para faz a chamada para o FF.....
>
vou testar amanha colocando false para verificar....
sobre funcionar apenas no IE... eh que é um sistema em PHP para rodar em Palm com Windows mobile.. por isso nao me preocupei para faz a chamada para o FF.....
Alterar só o valor para false não vai resolver, você também terá que adaptar a função "existe_produtos".
O resultado final pode ser mais ou menos assim:
function existe_produtos () { inicia_ajax(); req.open("GET", "existe_produtos.php?qualquer="+Math.ceil(Math.random() * 100000), false); req.send(); if (req.status == 200) return (resultado = req.responseText);}Só que há um problema... Se a página "existe_produtos.php" demorar muito para carregar o navegador do usário pode travar, porque o script fica parado até que a conexão aberta seja fechada... Então é melhor você usar a forma assíncrona, basta que você adapte seu código original.
opa.. funcionou colocando para false e deixando o return(resultado) depois req.send(null)obrigado
Amigo, olhando assim de primeira, creio que isso acontece porque o return com o resultado deveria estar em baixo da linha resultado = req.responseText. Vou dar uma testada para confirmar isso.
Outra coisa, seu código vai funcionar só no IE do jeito que está, para funcionar nos demais navegadores aconselho a mudar o código da função inicia_ajax() para este:
try{ req = new XMLHttpRequest();}catch(ee){ try{ req = new ActiveXObject("Msxml2.XMLHTTP"); }catch(e){ try{ req = new ActiveXObject("Microsoft.XMLHTTP"); }catch(E){ req = false; } }}
Valeu!!!