Combo Dinâmico com AJAX

Agência OFF, desenvolvimento de soluções web para as Agências Digitais

Default.asp

<html>
<head>
<title>Teste Combo</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<script language="javascript" src="ajax.js"></script>
</head>
<body>
Categoria:
<select name="categoria" onchange="alimentarCombo(this.value);">
    <option value="">[ Selecione ]</option>
  	<%
	set rs = conn.execute("SELECT codigo, nome FROM categoria ORDER BY nome ASC")
		if (not rs.eof) then
			while (not rs.eof)
				response.write("<option value="""&rs("codigo")&""">"&rs("nome")&"</option>")
			rs.moveNext : wend
		end if
	set rs = nothing
	%>
</select>
<br>
Sub-Categoria: <div id="resultado"></div>
</body>
</html>

ajax.js

function GetXMLHttp() {
	if (navigator.appName == "Microsoft Internet Explorer") {
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	} else {
		xmlHttp = new XMLHttpRequest();
	}
	return xmlHttp;
}
var mod = GetXMLHttp();

function alimentarCombo(valor) {
	mod.open("GET", "Carrega.ajax.asp?id="+valor+"", true);
	mod.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	mod.onreadystatechange = function() {
		if (mod.readyState == 4) {
			document.getElementById("resultado").innerHTML = mod.responseText;
		}
	};
	mod.send(null);
}

Carrega.ajax.asp

<select name="sub_categoria">
    <option value="">[ Selecione ]</option>
  	<%
	set rs = conn.execute("SELECT codigo, nome FROM sub_categoria WHERE categoria_id = '"&request.queryString("id")&"'")
		if (not rs.eof) then
			while (not rs.eof)
				response.write("<option value="""&rs("codigo")&""">"&rs("nome")&"</option>")
			rs.moveNext :wend
		end if
	set rs = nothing
	%>
</select>

Agência OFF, desenvolvimento de soluções web para as Agências Digitais


18 Respostas para Combo Dinâmico com AJAX

  1. Olá, como faço para carregar mais de uma combo, tipo a do webmotors, no meu caso são 5.

    Agradeço

  2. crie cada função para cada combo que vc quer, modificando os ID onde iram receber os valores!

  3. Fiz identico…
    olha o erro q da….
    http://www.mxstudio.com.br/forum/index.php?showtopic=72670&st=0#entry210338
    poderia me ajudar????
    desde já obrigada

  4. Ted k’ :
    parabéns pelo tópico…

    você está dando um /show em AJAX!!

    é o meu primeiro contato com essa tecnologia..
    mas preciso saber uma coisa..

    como faço para passar esses dados via post e recuperá-los?

    abração!!!

  5. Ted, beleza?
    Já venho usando esse código faz um tempo. Funciona que é uma beleza.
    Porém até hoje não consegui validar com o spry do dw o combo da div resultado.
    Tem idéia de como resolver isso?

  6. desconheço o spry a ponto de usar ele, poderia colocar na net para dar uma analisada?

  7. Parabens pelo tema….foi muito util

  8. muito bom, mais como fazer para funcinar no ff, ele não recupera a sub_categoria.

  9. para te ajudar, preciso saber o erro que gera, coloca na net, em alguma hospedagem para ver teu código!

  10. Parabéns pelo Post. Entendi como funciona de maneira clara e objetiva.

    Vlw.

  11. Ted K’,

    Eu estou utilizando seu exmplo no código abaixo:

    Modelos_Ajax.asp

    Selecione um Modelo

    <option value=”">

    ———————————————————————————————-
    E na página ASP que recupera o valor do campo “Carro”, não está recuperando no FF ou Chrome. o Valor fica sempre em branco.
    Estou recuperando assim: IDCarro = Request(“Carro”)

  12. Obrigado. seu código é bem esclarecedor!

  13. Pra utilizar esse código junto com um Spry ou outros formatadores de formulário, a função Java pra transformar o objeto no que é proposto pelo Spry deverá estar dentro do ajax.js logo após mod.send(null); (var comboVeiculo = new Spry(…) ..) e assim o objeto será renderizado após sua criação. O problema é que as vezes funciona às vezes não, é meio que aleatório e estou tentando entender o porque…

    Aparentemente depende do tempo pra retornar o valor de Carrega.ajax.asp e gerar o select… Se não for gerado e a função do Spry rodar, dará erro informando que o objeto existe. O segredo talvez esteja em identificar ou segurar o código de renderização para rodar somente a´pós o retorno do Carrega.ajax.asp…

    Se puder ajudar agradeço! Abraços!

  14. Consegui fazer funcionar utilizando um algum tipo de spry ou formatação. A var para gerar o combo box deve estar dentro da condição readyState (assim o combo só sera renderizado quando a página Carrega.ajax.asp estiver concluída.)

    mod.onreadystatechange = function() {
    if (mod.readyState == 4) {
    document.getElementById(“txSuper”).innerHTML = mod.responseText;
    var combo2 = new dhtmlXCombo(“txSupervisor”, “Rel_Form”, 200);
    }

    Abraços!

  15. Usei este combo dinâmico e estou com problemas ao fazer a consulta no banco com palavras que tem espaço. Por exemplo São Paulo!
    Faço um select das cidades e depois um select dos bairros de acordo com a cidade selecionada.
    Acredito que seja pelo modo que ele está passando a variável do primeiro select. Alguma sugestão?

  16. Amigo, tenho um combo que quando selecionado o estado abre a cidade, tudo funcionando redondinho. meu problema é quando eu clico em buscar. ele efetua a busca porem o combo perde os valores. gostaria que quando clicasse em buscar ele mostrasse o estado e a cidade selecionados.

    Como posso resolver isso?

  17. Melhor até usar jQuery já, irei criar um post usando o jQuery

  18. Achei ótimo, funcionou e tal.

    Estou utilizando em um form, só que quando dou o post ele não recupera o valor do select que está dentro da DIV.

    Quando olho o código fonte da pg com os dois selects, realmente só aparece um.

    Sabe me dizer pq o sistema ignora o conteúdo impresso?

    Se tivesse alguma função para qdo seleciono algo em sub-categoria ele preenche um campo texto, resolveria o problema tb.

    Poderia me ajudar?

    Obrigada!!!!!!!

Deixe seu Comentário