- 28-02-2007 #1
Sistema em Ajax consultando vários arquivos XMLOlá 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?
funções complementares para carga do menuCó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 que recebem os dados do processoCó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); }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..."); } } //
- 01-03-2007 #2
ajax para ajahVou te dar um conselho: eu programei muito em ajax e conclui que pegar
o xml, percorrer os nos filhos e montar um menu nao economiza processamento nenhum no servidor, que tem ainda o trabalho de gerar a XML.
Eu comecei a usar AJAH, em vez de pegar o XML e processar, eu pego responseText e jogo no InnerHTML do objeto do documento html, conclusao: meus sites ficam um tiro e eu nao tenho nenhuma dor de cabeça pra escrever o codigo javascript, que convenhamos, é muito lento o desenvolvimento comparado com outras linguagens.
<html>
<head>
<script language=javascript>
function Ajax(){
var XMLR=false;
try{XMLR=new ActiveXObject("Msxml2.XMLHTTP")}cat ch(e){
try{XMLR=new ActiveXObject("Microsoft.XMLHTTP")} catch(sc){XMLR=null}}
if(!XMLR&&typeof XMLHttpRequest!="undefined"){
XMLR=new XMLHttpRequest()
}
return XMLR;
}
function XML() {
DOMD = null;
if (window.ActiveXObject) { // IE
try {
DOMD = new ActiveXObject("Msxml2.DOMDocument") ;
} catch (e) {
try {
DOMD = new ActiveXObject("Msxml.DOMDocument");
} catch (e) {
DOMD = null;
}
}
} else if(document.implementation&&documen t.implementation.createDocuments) {
try {
DOMD = document.implementation.createDocum ent("","",null); // Mozilla
} catch (e) {
DOMD = null;
}
}
return DOMD;
}
function ajah_return(){
// retorno da busca HTML
if (AjaxRequest.readyState == 4) {
if (AjaxRequest.status == 200) {
// requisição concluida
var obj = document.getElementById('console');
if(obj != null){
obj.innerHTML = unescape(AjaxRequest.responseText);
}
} else {
alert("Erro ao carregar conteudo, tente novamente. (" + AjaxRequest.statusText + ")");
}
}
}
function ajah_load_return(){
// retorno da busca HTML
if (AjaxRequest.readyState == 4) {
if (AjaxRequest.status == 200) {
// requisição concluida
var obj = document.getElementById(ajah_load_t ag);
if(obj != null){
obj.innerHTML = unescape(AjaxRequest.responseText);
}
} else {
alert("Erro ao carregar conteudo, tente novamente. (" + AjaxRequest.statusText + ")");
}
}
}
function ajah_request(console){
var timestamp = new Date();
var url = '/ajah.php?console=' + console + '&via=ajah&nocache=' + timestamp.getTime();
// requisitar
AjaxRequest = null;
AjaxRequest = new Ajax();
AjaxRequest.onreadystatechange = ajah_return;
AjaxRequest.open('GET', url, true);
//debug("Ajah request: " + url);
AjaxRequest.send(null);
}
function ajah_requestcache(console){
var timestamp = new Date();
var url = '/ajah.php?console=' + console + '&via=ajah&nocache=' + timestamp.getTime();
// requisitar
AjaxRequest = null;
AjaxRequest = new Ajax();
AjaxRequest.onreadystatechange = ajah_return;
AjaxRequest.open('GET', url, true);
//debug("Ajah request cache: " + url);
AjaxRequest.send(null);
}
function ajah_load(console, tag, cache){
var c_uri = '';
if(cache){
var timestamp = new Date();
c_uri = '&nocache=' + timestamp.getTime();
}
var url = '/ajah.php?console=' + console + c_uri;
ajah_load_tag = tag;
// requisitar
AjaxRequest = null;
AjaxRequest = new Ajax();
AjaxRequest.onreadystatechange = ajah_load_return;
AjaxRequest.open('GET', url, true);
//debug("Ajah request cache: " + url);
AjaxRequest.send(null);
}
</script>
</head>
<body>
<!-- conteudo ajah -->
<span id='console'></span>
</body>
</html>MyAuth Gateway 2
- Controle de usuários
- Controle de banda
- Vários gráficos
- Veja quem está on-line
- Controle por tempo e agendamento
- Controle de volume de dados enviados/recebidos
- Gráficos por cliente
... e muito mais!
Visite www.myauth.com.br
Skype: patrickbrandao
Jesus - O único caminho
- 01-03-2007 #3
Obrigado pela resposta Patrick. Assim que eu comecei a ler sobre AJAX eu vi que apesar do X de XML na realidade 90% dos exemplos não tem nada de XML, e usam um puro e simples HTML, salvo quando o código é para rodar 100% em Micro$oft IE que possui alguns mecanismos para simplificar a vida (pena que não são padrnizados e nem só de IE vive um programador WEB).
Não entendia o motivo de fazerem isso já que a mídia fala tanto em XML e tentei desenvolver minha aplicação realmente usando XML, sem usar nenhuma biblioteca destas que existem por ai que dizem facilitar a vida exatamente porque a maioria nem passa perto do XML mas como você mesmo disse fica bastante trabalhoso.
A minha ideia sobre o XML é que a partir dele eu poderia realmente portar os dados mas infelizmente eu tenho que dar o braço a torcer, tem sido relativamente trabalhoso fazer isso. Será que alguém tem conseguido este tipo de desenvolvimento com AJAX real por ai sem muitas complicações?
Pelo que entendi então eu devo esquecer esse "conto de fadas" que fizeram sobre o AJAX e que na realidade é um atraso de vida. O negócio é ignorar o tal do XML trabalhando diretamente com respostas em texto.
Se alguém mais puder opinar registrando a sua experiência sobre o assunto eu agradeço. Tenho certeza que será bastante produtivo e elucidativo, não só pra mim, mas pra muita gente que ainda está boiando no assunto de AJAX.
GrRato.
Tópicos Similares
Ajax
Por Duca no fórum ApacheRespostas: 5Último Post: 05-12-2006, 15:03Unificar varios arquivos texto em um so
Por thiagotg no fórum Adm. em GeralRespostas: 3Último Post: 19-05-2006, 14:58Sistema de Arquivos GFS
Por eduardounai no fórum Adm. em GeralRespostas: 2Último Post: 17-05-2006, 12:23Compactar em vários arquivos com tamanho específico
Por koringa no fórum Adm. em GeralRespostas: 2Último Post: 25-03-2006, 04:34Sistema de arquivos
Por ruyneto no fórum Adm. em GeralRespostas: 4Último Post: 24-12-2004, 23:05



LinkBack URL
About LinkBacks




Marcadores