Preenchimento de Combos AJAX

0 respostas
ataufo

Galera, estou aprendendo AJAX no meu trabalho, e estou quebrando a cabeça para fazer um combo que preenche outro.

Estou tentando retornar a resposta para um array mas ele sempre retorna vazio, acho que não estou sabendo tratar a resposta, ou usar o parametro certo para o método getElementsByTagName.

Vou colar e quem puder me indica o que está errado:

JSP (Tags do Struts):

// ...  
                   <label for="select1">Módulo:</label>  
                   <html:select property="moduloAuditoria" styleId="moduloAuditoria" onchange="recuperaFuncionalidades(this.options[this.selectedIndex].value);">     
                       <html:options name="listMdlAuditoria" collection="listMdlAuditoria" property="identificador" labelProperty="nome" />     
                   </html:select>    
                     
                   <label for="select1">Funcionalidade:</label>  
                   <html:select property="funcionalidadeModulo" styleId="funcionalidadeModulo" onchange="recuperaAcoes(this.options[this.selectedIndex].value);">     
                       <html:options name="listFuncionalidadeModulo" collection="listFuncionalidadeModulo" property="identificador" labelProperty="nome"/>     
                   </html:select>    
 // ...

AJAX:

function recuperaFuncionalidades(id)  
   {   
       listaFuncionalidades = document.getElementsByName("funcionalidadeModulo");   
       ajax.open("POST", action, true);   
       ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");   
         
       ajax.onreadystatechange = function(){  
     
           //enquanto estiver processando...emite a msg de carregando   
           alert('estado:'+ajax.readyState);  
           if(ajax.readyState == 1) {   
               listaFuncionalidades.value = "Carregando...";  // OBS: Não escreve isso no combo não sei porque !!  
           }   
             
           //após ser processado - chama função processXML que vai varrer os dados   
           if(ajax.readyState == 4 ) {   
                 
               if(ajax.responseXML) {  
                   processXMLFunc(ajax.responseXML);   
               }   
               else {   
                   //caso não seja um arquivo XML emite a mensagem abaixo   
                   listaFuncionalidades.innerHTML = "Selecione a categoria";   
               }   
           }   
             
       }   
       alert('Envia o Pedido');  
       ajax.send("operacao=buscaFuncs&id=&quot + id);  
   }  
         
   function processXMLFunc(obj){   
         
       alert('Entrou processXMLFunc');  
         
         
       var dataArray = obj.getElementsByTagName("listFuncionalidadeModulo");   
       alert('achou:'+parseInt(dataArray.length));  
         
                                 //total de elementos contidos  
       if(dataArray.length > 0) {   
           alert(101);  
           //percorre o arquivo XML paara extrair os dados   
           for(var i = 0 ; i < dataArray.length ; i++) {   
               
               //AINDA NÃO ALTEREI ESSA PARTE NO EXEMPLO PQ NUNCA CHEGO ATÉ AKI
               var item = dataArray[i];   
     
               //contéudo dos campos no arquivo XML   
               var codigo = item.getElementsByTagName("codigo")[0].firstChild.nodeValue;   
               var descricao = item.getElementsByTagName("descricao")[0].firstChild.nodeValue;   
               idOpcao.innerHTML = ""; //Selecione a seção   
                 
               //cria um novo option dinamicamente   
               var novo = document.createElement("option");   
               //atribui um ID a esse elemento   
               novo.setAttribute("id", "opcoes");   
               //atribui um valor   
               novo.value = codigo;   
               //atribui um texto   
               novo.text = descricao;   
               //finalmente adiciona o novo elemento   
               document.frmAjax.codSec.options.add(novo);   
           }   
       }   
       else {   
           alert('else');  
           //caso o XML volte vazio, printa a mensagem abaixo   
           listaFuncionalidades.innerHTML = "Selecione a categoria"; // Não exibe essa mensagem em lugar nenhum !!  
       }   
   }

É produzida a seguinte saída nos Alerts:
Envia o Pedido
estado:1
estado:2
estado:3
estado:4
Entrou processXMLFunc
achou: 0
else

(E nada acontece depois)

Por favor, alguem me ajuda ?!!!?

Criado 27 de outubro de 2009
Respostas 0
Participantes 1