[RESOLVIDO] Ajax sinc e asinc, com imagem de espera

4 respostas
W

Galera, seguinte. Estava tentando fazer aparecer uma imagem em quanto a requisição estiver rodando.
OK. Pesquisando verifiquei que é so colocar [color=blue]FALSE [/color]na requisição que ela passa a ser sinc. e ira aguardar.
OK.
Se eu utilizo a função em [color=blue]FALSE[/color], aparece a imagem de carregando, mas assim que a operação é concluida, o texto do ajax não aparece no local.
Se eu utilizo a função com [color=darkblue]TRUE[/color], a imagem não aparece mais, acredito que seja por que não existe mais a espera pelo processamento e ao final do codigo a imagem é oculta instantaneamente, porem o texto ajax aparece corretamente no local.
Se fosse um erro no codigo ajax, acredito que não funcionaria de nenhum dos dois jeitos, mas eu não entendo por que quando coloco em [color=darkblue]FALSE [/color]ele para de aparecer na pagina.
[color=red]Quando digo FALSE e TRUE me refiro a linha 22 do codigo abaixo. Navegador Mozilla[/color]

var idImagemCarregando;
var comboPing;
//Mostrar imagem gif (carregando)
function trocarVisibilidade(id){
    idImagemCarregando = 'carregando' + id;
    var div1 = document.getElementById(idImagemCarregando);
    div1.style.display = 'block';
    var div2 = document.getElementById('ping' + id);
    div2.style.display = 'none';
}
function mandaPingAjax(combo, ip){
    url="/jsp/rede/roteador/ping.jsp?ip="+ip;
    comboPing = combo;
    ajaxPing(url);
}
function ajaxPing(url){
    req = null;
    // Procura por um objeto nativo (Mozilla/Safari)
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChangePing;
        req.open("GET",url,true);
        req.send(null);
        var div1 = document.getElementById(idImagemCarregando);
        div1.style.display = 'none';
        var div2 = document.getElementById(comboPing);
        div2.style.display = 'block';
    // Procura por uma versão ActiveX (IE)
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChangePing;
            req.open("GET",url,false);
            req.send();
        }
    }
}
function processReqChangePing(){
    //alert('teste');
    // apenas quando o estado for "completado"
    if (req.readyState == 4) {
        // apenas se o servidor retornar "OK"
        if (req.status ==200) {
            // procura pela div id="pagina" e insere o conteudo
            // retornado nela, como texto HTML
            document.getElementById(comboPing).innerHTML = req.responseText;
        } else {
            document.getElementById(comboPing).innerHTML = req.statusText;
        }
    }
}

eu chamo este codigo desta maneira:

onClick="trocarVisibilidade('<%= cont%>'), mandaPingAjax('ping<%= cont%>', '<%= IP%>')"

Pra testar, eu coloquei um [color=red]alert(‘teste’)[/color] na linha 39, em [color=blue]TRUE [/color]o alert é exibido na tela, em [color=darkblue]FALSE [/color]ele não é exibido

4 Respostas

W

Nenhuma idéia? :frowning:

drigo.angelo

Cara, usa o Ajax do Jquery, muuuuuuuito mais fácil…

W

ok. Estava a tentar utilizar o Jquery, o segundo exemplo desta pagina, iria resolver o request, que justamente eu obtenho os dados de uma classe.

http://www.cs.wcupa.edu/~rkline/Java/ajax.html

So que este segundo exemplo [color=red]First AJAX usage[/color] não funciona :frowning: . Alguma dica?

O primeiro funcionou 100%, so que ele simplesmente pega o valor que ja esta na pagina e escreve no inner, o que me interessaria no caso seria este segundo que obtem o valor da classe.

Ja aproveitando, teria como aguardar esta requisição e durante este “aguardo”, ele mostrar a imagem (no caso um gif, de uma barra de progresso)?

W

Realmente é muuuuuuito mais facil.

//Função para JQuery
<script>
    function pingaRoteador(id, ip) {
        $('#ping'+id).html('<img    />');//Imagem de Carregando
        $('#ping'+id).load("/jsp/rede/roteador/ping.jsp?ip="+ip);//Carregar request
    }
&lt;/script&gt;

//Div onde é mostrado o resultado
&lt;div id="ping&lt;%=++cont%&gt;"&gt;&lt;/div&gt;

//Chamada no Codigo
onClick="pingaRoteador(&lt;%= cont%&gt;, '&lt;%= getIp()%&gt;')
Criado 22 de março de 2011
Ultima resposta 24 de mar. de 2011
Respostas 4
Participantes 2