Olá galera,
Estou desenvolvendo o meu primeiro sistema com a vedete do ciber-mundo (Ajax).
A aplicação consiste em um sistema de protocolo eletrônico (quem trabalha em órgão público deverá entender melhor o que é). O sistema lê um cadastro de documentos (processos) com seus respectivos trâmites, nada de mais.
A tela é divida verticalmente em duas partes (esquerda e direita). Do lado direito eu tenho uma listagem de números de processos ordenados em pastas (como as pastas de um webmail) esta listagem é a saída de um XML criado dinamicamente em PHP e do lado esquerdo eu apresento os dados do processo selecionado no lado direito e estes dados vem de uma nova consulta a base que gera outro XML dinamicamente a via PHP.
Note que o conceito é bem simples e até este ponto ele está funcionando, mas eu não estou satisfeito com a forma como implementei, pois eu tive que duplicar as funções LoadXML (listagem abaixo) usando uma função para gerar cada XML. Usando a mesma função (o que deveria ser o correto já que elas fazem a mesma coisa) eu não consigo realizar as duas consultas. Alguém pode dizer uma forma mais higiênica de se fazer isso sem precisar duplicar esta função?
Código ://Cria um objeto XMLHttpRequest de acordo com o browser - ISSO SIM inicia o Ajax function GetXmlHttpObject() { var xmlHttp=null; try { // Firefox, Opera 8.0+, Safari xmlHttp=new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xmlHttp=new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } } // if ( xmlHttp == null ) { alert('Seu navegador nao suporta AJAX'); } // return xmlHttp; } /* Carrega a URL especificada em modo assincrono e ao mudar o estado dispara a função fornecida */ function loadXML(url,funcao) { xmlHttp = GetXmlHttpObject(); xmlHttp.onreadystatechange=funcao; xmlHttp.open("GET",url,true); xmlHttp.send(null); } /* Carrega a URL especificada em modo assincrono e ao mudar o estado dispara a função fornecida */ function loadXML2(url,funcao) { xmlHttp2 = GetXmlHttpObject(); xmlHttp2.onreadystatechange=funcao; xmlHttp2.open("GET",url,true); xmlHttp2.send(null); }
funções complementares para carga do menu
Código :/* Carrega os numeros de processos no menu lateral Esta função é chamada pela funcao loadMenuProcesso */ function loadMenu(xmlDoc) { processos = xmlDoc.getElementsByTagName("listaprocessos")[0].getElementsByTagName("areceber")[0].getElementsByTagName("processo"); total_processos = processos.length; // lista = "<b>A receber ("+ total_processos +")</b><br>"; for (tr = 0 ; tr < total_processos ; tr++) { // try { processo = processos[tr].getElementsByTagName("numprocesso")[0].firstChild.nodeValue; cod = processos[tr].attributes[0].nodeValue; processo += ' - ' + cod; processo = "<A HREF='#' id='itemprocesso' onClick='Javascript:ShowProcesso("+cod+");'>"+processo+"</A>"; } catch (e) { processo = "-"; } lista += processo + "<br>"; } } /* Carrega os dados e os tramites de um dado processo de forma assincrona */ function loadMenuProcesso() { if (xmlHttp2.readyState==4) { // if "OK" if (xmlHttp2.status==200) { xmlDoc = xmlHttp2.responseXML; loadMenu(xmlDoc); situacao("Menu Pronto!"); } else { alert("Problemas ao receber os dados XML para construir o menu"); } } else if (xmlHttp2.readyState==1) { situacao("Carregando menu..."); } } // /* Carrega a lista de processos do setor especificado no menu de navegacao */ function ShowMenu(codsetor) { var url="listaprocessos.xml"; var url="listaprocessos_xml.php"; url=url+'?codsetor='+codsetor //alert(url); loadXML2(url,loadMenuProcesso); }
Funções que recebem os dados do processo
Código :/*Pega o dado especificado da arvore XML */ function my_getnode(mynode) { try { return xmlDoc.getElementsByTagName(mynode)[0].childNodes[0].nodeValue; } catch (e) { return "<span style='color:red'> "+mynode + " nao especificado</span>"; } } /* Carrega os dados do processo especificado Esta função é chamada pela funcao loadProcesso */ function loadProcessoDados(xmlDoc) { document.getElementById("numprocesso").innerHTML = my_getnode("numprocesso"); document.getElementById("interessado").innerHTML = my_getnode("interessado"); document.getElementById("assunto").innerHTML = my_getnode("assunto"); document.getElementById("documento").innerHTML = my_getnode("numerodocumento"); document.getElementById("data").innerHTML = my_getnode("datacadastro"); } // /* Carrega os dados e os tramites de um dado processo de forma assincrona */ function loadProcesso() { if (xmlHttp.readyState==4) { // if "OK" if (xmlHttp.status==200) { xmlDoc = xmlHttp.responseXML; loadProcessoDados(xmlDoc); loadProcessoTramites(xmlDoc); situacao("Processo carregado"); } else { alert("Problemas ao receber os dados XML do processo"); } } else if (xmlHttp.readyState==1) { situacao("Carregando dados do processo..."); } } //