Ir para conteúdo
Fórum Script Brasil
  • 0

(Ooops...Não Resolvido) Load Ajax Em Várias Páginas Ao Mesmo


desenvolvedor.ricardo

Pergunta

Boa tarde!

Uma dúvida:

Tenho uma lista de clientes onde eu a 'puxo' do banco de dados e insiro na página através do xml. E com o ajax eu a requisito, sendo que eu coloquei atualização a cada 5 segundos. Só que esta lista, está mostrando todos os clientes numa mesma página. Quero saber se vocês conhecem alguma maneira de eu dividir essa lista por páginas e dar esse 'refresh' na lista completa ao mesmo tempo?! Tipo um update (com ajax) na lista inteira?

Abraços!

Editado por desenvolvedor.ricardo
Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Opa.

Ixi cara, fica meio complicado te ajudar por que não sei como é esse código em ajax, não sei que tipo de funções está usando nem o que elas retornam....

Eu sou meio burro, não entendi direito como é essa atualização, eu imagino que uma função é executada de 5 em 5 minutos, retornando um objeto novo com o conteúdo do xml, estou certo ?

Eu também não sei como está os nodos do seu xml, mas eu imagino mais ou menos o que está fazendo. você já deve ter pronto o código que mostra na tela os clientes atualizados, é nessa parte do código que deve se preocupar, deve pensar em um algoritmo que exiba x clientes e se caso houverem mais de x clientes, então o javascript cria um link apontando para uma função que faz loadear os proximos x clientes.

Posta algum código ae pra gente tentar fazer isso funcionar.

Kelabrassssss

Link para o comentário
Compartilhar em outros sites

  • 0

Cara, é bem por aí mesmo em relação a um dado novo a cada reload. Só que mesmo de 5000 milisegundos (5 segundos). Bem, vou postar o que é o arquivo. Nesse abaixo, é o código em Ajax:

// Criando Objeto HTTP_Request
try{
    xmlhttp = new XMLHttpRequest();
}catch(ee){
    try{
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }catch(e){
        try{
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }catch(E){
            xmlhttp = false;
        }
    }
}

// Cria uma nova linha
function CreateRow(){
    
    // Tabela a ser criado os elementos
    var Table = document.getElementById("registros");
    
    //Verifica se o Browser suporta "AJAX".
    if(xmlhttp){
            
        
        // Abre a url
        xmlhttp.open("GET", 'lista_dinamica.php', true);
        
        //Executada quando o navegador obtiver o código
        xmlhttp.onreadystatechange = function(){
            
            // Obtem o resultado em XML - Para obter o em texto use .responseText
            if (xmlhttp.readyState==4){
                
                // coleta os valores do campo do arquivo XML
                var resultado = xmlhttp.responseXML;
                
                // coleta os valores do arquivo XML
                var Registros = resultado.getElementsByTagName("cliente");
                var TotalRegistros = Registros.length;
                
                // Limpando tabela
                LimpaTabela(Table);
                
                for (var i = 0; i < TotalRegistros; i++) {
                    
                    // Insere a Linha
                    var Linha = Table.insertRow(1);
                    
                    // Cria Célula
                    CreateCel(Linha,Registros[i]);
                }
            }
        }
        xmlhttp.send(null);

    }
}

function CreateCel(tLinha, tRegistros){

    var Celulas = new Array('id','nome','conta');
    var TotalCel = Celulas.length;
    var TabCel;
    
    for(var a=0; a < TotalCel; a++){
        TabCel = tLinha.insertCell(-1);
        var Texto = tRegistros.getAttribute(Celulas[a]);
        
            var id_clie = tRegistros.getAttribute('id');
            Texto = '<a href="invest.php?pk='+id_clie +'"><font color="#000000">' + Texto + '</font></a>';
        //}    
        
        TabCel.innerHTML = Texto;
    }
}

//Removendo as linhas da tabela
function LimpaTabela(tTabela){
    
    // Total linhas de tabela
    totLinhas = tTabela.rows.length;
    
    // a variável (i) deve começar a partir de (1),    se começar de (0) o cabeçalho é removido
    for(i=1;i<totLinhas;i++){
        
        // Remove linha
        tTabela.deleteRow(1);
    }    
}
Esse mais abaixo é o xml:
<?php
    require_once('config/config.php'); 
    
        header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
        header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
        header("Content-type: text/xml; charset=ISO-8859-1");
        print '<?xml version="1.0" encoding="ISO-8859-1"?>';    

    //$Sql      = " SELECT pk003, nm_nomecliente, nu_contacorrente FROM tb003_cliente WHERE ic_contato = '1' ORDER BY nm_nomecliente DESC"; 
    $Sql  = " SELECT a.pk003, a.nu_contacorrente, a.nm_nomecliente, b.dt_data, b.hr_hora FROM tb003_cliente a";
    $Sql .= " LEFT JOIN tb002_investimento b ";
    $Sql .= " ON (a.pk003=b.fk003) ";
    $Sql .= " WHERE a.ic_contato = '1' ";
    $Rs      = $db->Execute($Sql);

$quantreg = $Rs->RecordCount();
    echo "<clientes> "; 
    
    if($quantreg > 0 ){    

        while(!$Rs->EOF){    
                
            
            printf("<cliente id=\"%s\" nome=\"%s\" conta=\"%s\" data=\"%s\" hora=\"%s\" />\n", $Rs->fields['pk003'], $Rs->fields['nm_nomecliente'] , $Rs->fields['nu_contacorrente'], $Rs->fields['dt_data'], $Rs->fields['hr_hora']);    
            $Rs->MoveNext();
            
        }
            
    }else{
    
            echo("<cliente id=\"\" nome=\"\" conta=\"\" data=\"\" hora=\"\" />\n");        
            
    }    

    
    echo "</clientes>";     
?>

Sendo que numa outra página, eu coloco pra aparecer os dados destes clientes. sáo por volta de 300 nomes seguidos de seus dados. Só que eles aparecem em uma página apenas. Quero dividí-los em páginas (1,2,3...) e dar o reload (Ajax) em todas ao mesmo tempo...é possível!!!

Editado por fercosmig
Utilize as tags de código. Facilita a visualização.
Link para o comentário
Compartilhar em outros sites

  • 0

Opa, eu de novo.

Então véi, eu fiz um código em js aqui que talvez atenda nossa necessidade.

Primeiramente, faça um backup do seu arquivo js do ajax.

Feito o backup, remova essa parte do seu código:

for (var i = 0; i < TotalRegistros; i++) {
                    
                    // Insere a Linha
                    var Linha = Table.insertRow(1);
                    
                    // Cria Célula
                    CreateCel(Linha,Registros[i]);
                }
você escolhe se remove apagando essas linhas, ou apenas comentando o trecho do código. Coloque no lugar onde removeu o for, a seguinte linha:
displayClientes(Registros.length, 1, 10, Registros)
Insira meu código no seu código de ajax, ANTES da função createRow() O código é esse:
function displayClientes(tamanho, pg, q, reg){

var paginas, ID, i

ID=function(id){ return document.getElementById(id)}
paginas=Math.floor(tamanho/q)+((tamanho%q)?1:0)


ID('pgLinks').innerHTML=""

    for(i=1; i<=paginas; i++)
    ID('pgLinks').innerHTML+="<a href='#' onclick='displayClientes("+tamanho+","+i+","+q+")' style='margin-right:5px'>"+i+"</a>"

ID('pgLinks').innerHTML+="<span>("+pg+")</span>"

    for(i=((pg-1)*q); i<((pg-1)*q)+1+(q-1); i++){

        if(i>tamanho-1)
        break

    // Insere a Linha
    var Linha = Table.insertRow(1);

    // Cria Célula
    CreateCel(Linha,reg[i]);

    }

}
Seguinte, o código que eu criei chama-se displayClientes(). Ela funciona da seguinte maneira: displayClientes(tamanho, pg, q, reg) - tamanho é o tamanho em quantidades inteiras de qualquer coisa. - q é a quantidade que quer mostrar por página. - pg é a página atual em que está - reg é um atributo que eu fiz para o seu caso, que é um vetor que recebe o vetor de clientes achados no xml. A minha função funciona muito bem sozinha, se algo der errado ( E vai dar) provavelmente é na integração dela com o seu código, e isso da pra resolver rapidamente. A única preocupação que eu tenho logo de cara é que na linha 9 do meu código:
9.   ID('pgLinks').innerHTML=""

Ele faz uma chamada para pegar o id do div que conterá os links para as próximas páginas dos clientes. Se o div não tiver sido criado antes do código ser executado, vai dar problema, pois o js não vai encontrar o elemento que se quer "innerHTMLzar" (credo...huahua).

Boa sorte cara, provavelmente vai dar problema, mas o algoritmo que é a parte mais difícil está pronto.

Edit: Esqueci, deixa pra depois o load para atualizar, essa parte é mais fácil, tenta fazer funcionar direito esse negócio de mostrar x clientes por página, esta é sem dúvida a parte mais difícil.

Kelabrassssssssssss

Editado por KaKarotto
Link para o comentário
Compartilhar em outros sites

  • 0

Cara, realmente funciona!!! estou testando agora! Deu uns erros de integração mesmo, mas (no caso, depois do 'break'

// Insere a Linha

var Linha = insertRow(1);

// Cria Célula

CreateCel(Linha,reg);

como não havia nada definido, vou integrar pra poder aparecer os nomes dos clientes e assim, fazer funcionar! Nossa...resolveu assim DEMAIS!!!!!!!!!!!! MUITÍSSIMO OBRIGADO!!!

ABRAÇOS!!!!!!

Fala!!!!

Bem, o lance é o seguinte: (rrsrsrsrsrsr)

Realmente o seu InnerHTMLzar (ahauahuahauahuahauh) não está InnerHTMLzando direito na tela!! quando visualizo, é massa...aparece á numeração corretíssima de qtas páginas aparecem e tal....! tá massa! Mas parece quer ele 'puxa' a qtd de cleintes existentes na base, mas não screve na tela o 'nome' desses clientes divididos em paginas...Creio eu que seja realmente naquele comsndo:

ID("registros") .innerHTML=" ";

...nossa estou quebrando a cabeça pra colocar....Alguma luz?

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Oi ricardo.

Eu percebi um erro bem besta no meu código, não sei se é esse o problema, mas corrija.

Nessa linha da minha função:

for(i=1; i<=paginas; i++)
    ID('pgLinks').innerHTML+="<a href='#' onclick='displayClientes("+tamanho+","+i+","+q+")' style='margin-right:5px'>"+i+"</a>"
Ele tá colocando no onclick apenas 3 argumentos na minha função, falta o argumento Registro. Ficaria assim:
for(i=1; i<=paginas; i++)
    ID('pgLinks').innerHTML+="<a href='#' onclick='displayClientes("+tamanho+","+i+","+q+","+reg+")' style='margin-right:5px'>"+i+"</a>"

Não estou compreendendo exatamente o seu problema. Nesse erro, provavelmente você veria na primeira página os clientes certinho, com as quantidades de páginas corretas, porém você não conseguiria ver o resto quando clicasse no link da próxima página.

Era isso???!?!?

Kelabrasssssss

edit: Outra coisa, o primeiro problema que deu, você pode solucionar tirando o var da frente do Table na função que cria a tabela. Dessa forma a minha função iria "enxergar" a variável Table, que foi criada na outra função privadamente.

Editado por KaKarotto
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...