Bom dia pessoal.
É o seguinte, estou desenvolvendo uma aplicação que devido aos requisitos da mesma eu tenho que usar Servlets... Fui obrigado a isso pois o meu cliente quer assim... Enfim, é um cadastro simples, nada de muito complexo, com upload de arquivos e outras coisas... No cadastro "principal" eu tenho vários combos e listas que trazem os dados dos outros cadastros. O problema é que o cliente quer que possam ser cadastrados novos itens desses subcadastros dentro do formulário principal.
Usei Ajax para isso da seguinte forma. Ao lado da lista ou combo eu tenho um botão "+" que ao ser clicado abre um popUp com o cadastro (somente o formulário de inserção). Quando o usuário cadastra o novo item, é dado um aviso a ele (usando o alert()) e é chamada uma função em Javascript para atualizar a lista/combo correspondente. É aí que entra o Ajax. O estranho que é localmente funciona certinho, mas quando passo o link da minha máquina (com meu ip) p/ o usuário, ele diz que não funciona, que fica travado e não atualiza.
No servidor de produção é estranho pq tem hora que funciona e tem hora que não funciona.
Eu testei duas formas de gerar o XML carregado pelo Ajax.
Primeira - Usei um JSP para cada entidade que ao invés da página, retornava um XML da listagem da entidade;
Segunda - Usei um Servlet para o mesmo propósito.
Ao usar o Servlet eu percebi que a velocidade da atualização melhorou um pouco.
Abaixo estou listando o Javascript que faz a atualização.
function carregarElementosAjax( comboDestino, nomeDoNodoXML, urlDeCargaDoAjax ){
combo = document.getElementById( comboDestino );
while ( comboDestinoDosDados.length > 0 )
combo.remove( 0 );
ajax = criarAjax();
ajax.onreadystatechange = function() {
if ( ajax.readyState == 4 ) {
xmla = ajax.responseXML;
elementos = xmla.getElementsByTagName( nomeDoNodoXML );
for ( i = 0; i < elementos.length; i++ ) {
elementoDoXML = document.createElement( "option" );
elementoDoXML.text = elementos[ i ].childNodes[ 0 ].nodeValue;
elementoDoXML.value = elementos[ i ].attributes[ 0 ].value;
combo.options.add( elementoDoXML );
}
}
}
ajax.open( "GET", urlDeCargaDoAjax, true );
ajax.send( null );
}
function criarAjax(){
xmlHttp = null;
try{
// Firefox, Opera 8.0+, Safari
xmlHttp = new XMLHttpRequest();
} catch ( e ) {
// Internet Explorer
try {
xmlHttp = new ActiveXObject( "Msxml2.XMLHTTP" );
} catch ( e ) {
try {
xmlHttp = new ActiveXObject( "Microsoft.XMLHTTP" );
} catch ( e ) {
alert( "Seu navegador não suporta Ajax!" );
}
}
}
return xmlHttp;
}
O erro apresentado no firebug quando não funciona é "xmla has no properties" (linha 14 do código acima), ou seja, o XML não é gerado.
Uso Hibernate e Spring na minha aplicação. Alguém tem uma idéia do que eu posso fazer?