Galera, estou aprendendo AJAX no meu trabalho, e estou quebrando a cabeça para fazer algo simples.
Vou colar e quem puder me indica o que está errado:
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 preenche o 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=1");
}
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++) {
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 !!
}
}
JSP:
// ...
<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>
// ...
É produzida a seguinte saída nos Alerts:
Envia o Pedido
estado:1
estado:2
estado:3
estado:4
Entrou processXMLFunc
achou: 0
else
Achou que não estou sabendo tratar a resposta. Alguem me ajuda ?!!!?