Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Marcos Vilela Alves

[Resolvido] carregar combo box sem refresh com ajax

Recommended Posts

bom dia...

etou com um problema..no meu sistema quero colocar um combo box para selecionar tipos de equipmentos.. e quando escolher um tipo um outro combo eh preenchido com as opcoes que sao cadastradas nestes tipo...

entao.. eu copiei uma funcao e adaptei ela para meu sistema... acho ki mudei tudo ki tinha ki ser mudado...

bomm..

criei a pagina prepara_equipamento.php para fzr a busca e me retornar um xml com todos os valores para colocar dentro do box...

ela esta retornando no vetor a quantidade certa de posicoes...

mas a funcao naum esta colocando os valores no combo..

ela poes apenas a linha "--Selecione uma das opções abaixo--".....

 

 

alguem poderia mi ajudar???

esta faltando ou passando alguma coisa ai???Talvez eu tenha esquecido de mudar alguma coisa ou mudado coisa d+

 

O link para a pagina da funcao original eh este

 

function dados(valor)
	{//verifica se o browser tem suporte a ajax
		  try 
		  {
			 ajax = new ActiveXObject("Microsoft.XMLHTTP");
		  } 
		  catch(e) 
		  {
			 try 
			 {
				ajax = new ActiveXObject("Msxml2.XMLHTTP");
			 }
			 catch(ex) 
			 {
				try 
				{
				   ajax = new XMLHttpRequest();
				}
				catch(exc)
				 {
				   alert("Esse browser não tem recursos para uso do Ajax");
				   ajax = null;
				}
			 }
		  }
		  //se tiver suporte ajax
		  if(ajax) {
			 
			 idOpcao  = document.getElementById("opcoes");
			 
			 ajax.open("POST", "prepara_equipamentos.php", true);
			 ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			 
			 ajax.onreadystatechange = function() {
				//enquanto estiver processando...emite a msg de carregando
				if(ajax.readyState == 1) {
				   idOpcao.innerHTML = "Carregando...!";   
				}
				//após ser processado - chama função processXML que vai varrer os dados
				if(ajax.readyState == 4 ) {
				   if(ajax.responseXML) {
					  processXML(ajax.responseXML);
				   }
				   else {
					   //caso não seja um arquivo XML emite a mensagem abaixo
					   idOpcao.innerHTML = "--Primeiro selecione o tipo--";
				   }
				}
			 }
			 //passa o código do estado escolhido
			 var params = "tipo="+valor;
			 ajax.send(params);
		  }
   }
   
   function processXML(obj){
	  //pega a tag cidade
	  var dataArray = new Array();
	  dataArray   = obj.getElementsByTagName("equipamento");
	  alert(dataArray.length);
	  //total de elementos contidos na tag cidade
	  if(dataArray.length > 0) {
		 //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 idmarca	=  item.getElementsByTagName("id_equipa").firstChild.nodeValue;
			var nomemarca =  item.getElementsByTagName("modelo_equipa").firstChild.nodeValue;
			
			idOpcao.innerHTML = "--Selecione uma das opções abaixo--";
			
		
		  
		   //cria um novo option dinamicamente  ESTE JAH ESTAVA NA FUNCAO QUE ACHEI
			var novo = document.createElement("option");
				//atribui um ID a esse elemento
				novo.setAttribute("id", "opcoes");
				//atribui um valor
				novo.value = idmarca;
				//atribui um texto
				novo.text  = nomemarca;
				//finalmente adiciona o novo elemento
				document.clientes.f_equipamento.options.add(novo);
		 }
	  }
	  else {
		//caso o XML volte vazio, printa a mensagem abaixo
		idOpcao.innerHTML = "--Nao funcionou--";
	  }	  
   }

/*CODIGO DA PAGINA*/
<tr>
		 <td align="right">
					   Tipo Equipamento<font color="#FF0000">*</font>: 
		  </td>
		  <td>
					   <select name="sl_tipo_eq" id="sl_tipo_eq" onChange="dados(this.value);" >
									<option value="0" <? if ($_GET["id_tipo"] == "0"){ echo "SELECTED";} ?> >Selecione</option>
									<option value="1" <? if ($_GET["id_tipo"] == "1"){ echo "SELECTED";} ?> >Placa-PCI</option>
									<option value="2" <? if ($_GET["id_tipo"] == "2"){ echo "SELECTED";} ?> >Access Point - AP</option>
									<option value="3" <? if ($_GET["id_tipo"] == "3"){ echo "SELECTED";} ?> >USB</option>
					   </select>
		   </td>
</tr>
<tr>
		   <td colspan="3">
						 <select name="f_equipamento" id="f_equipamento">
									 <option value="" id="opcoes"> Selecione</option>
						  </select>
			</td>
</tr>

esta dando um erro nessa linha document.clientes.f_equipamento.options.add(novo);

o erro eh esse:document.clientes.f_equipamento.options.add(novo) é nulo ou não é um objeto.

 

pagina prepara_equipamento.php

<?php
require('classes.php');
require('conecta.php');
	
	$tipo = $_POST["tipo"];
	
	$sql = "select * from sm_equipamentos where tipo = $tipo";
	$res = mysql_query($sql, $db_conexao) or die(mysql_error());
	$num_row = mysql_num_rows($res);
if($num_row>0)
{
	$xml.= "<equipamentos>\n";
	while($row = mysql_fetch_array($res))
	{
		$cod_equi =  $row["cod"];
		$modelo = $row["modelo"];
		
		$xml.="<equipamento>\n";
		$xml.="<id_equipa>".$cod_equi."</id_equipa>\n";
		$xml.="<modelo_equipa>".$modelo."</modelo_equipa>\n";
		$xml.="</equipamento>\n";
		
	}
	$xml.="</equipamentos>\n";
	Header("Content-type: application/xml; charset=iso-8859-1"); 
}
	echo $xml;

?>

a pagina prepara_equipamento.php esta imprimindo isso:

- <equipamentos>
- <equipamento>
  <id_equipa>1</id_equipa> 
  <modelo_equipa>GENERICO</modelo_equipa> 
  </equipamento>
- <equipamento>
  <id_equipa>4</id_equipa> 
  <modelo_equipa>EW-7128</modelo_equipa> 
  </equipamento>
- <equipamento>
  <id_equipa>8</id_equipa> 
  <modelo_equipa>CHIPSET RALINK 2500</modelo_equipa> 
  </equipamento>
  </equipamentos>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Substitui document.clientes.f_equipamento.options.add(novo); por document.getElementById('f_equipamento').options.add(novo); e faz um teste, se não funcionar posta aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Substitui document.clientes.f_equipamento.options.add(novo); por document.getElementById('f_equipamento').options.add(novo); e faz um teste, se não funcionar posta aqui.

cara substiui...

o erro sumiu... mas os options naum aparecem......

aparece soh --Selecione uma das opções abaixo--..

as opcoes validas naum aparecem naum..

fiz um teste colocando um alert, e os valores estao vindo corretamento. soh nao estao sendo colocados no combo...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.