Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Popolamento select dinamiche ajax

    Ho creato delle select dinamiche usando ajax per selezionare regione->provincia->comune cioè 3 select di cui le ultime due prendono il risultato precedente, credo di aver reso l'idea oramai ci sono su tutte le pagine di regitrazione piu o meno, cmq il problema e che dopo aver selezionato la regione non riesco a popolare la select delle provincie, vi posto il codice se potete dargli un occhiata per capire dov'è che sbaglio ve ne sarei grato



    ora vi posto il controller :
    codice:
    <?php
    
    class CAjax
    {
      public function Seleziona() 
      
     {  
        $CRegistrazione=USingleton::getInstance('CRegistrazione');
        $VHome=USingleton::getInstance('VHome');
    	$VAjax=USingleton::getInstance('VAjax');
         
    	switch ($VAjax->GetRequest('task')) 
        {
         case: 'getRegioni':
    	    {
    	    
    		return $this->GetRegioni();
    	    }
    	 
    	 case: 'getProvincie':
    	    {
    	    $regione=$VAjax->GetRequest('regione'):
    		return $this->GetProvincie();
    	    }
         
    	 default:
    	   { 
            	$registrazione=$CRegistrazione->GetUtentLoggato();
                if($registrazione)
                return $VHome->SetPageLoggato();
                else
                return $VHome->SetPageNonLoggato();			
    
    	    }
    	}
     
     }
    
    
     public function  GetRegioni()
        { $FRegione=USingleton::getInstance('FRegione');
    	  $VAjax=USingleton::getInstance('VAjax');
     
        $query="SELECT * FROM `regioni` ORDER BY _regione;";
    	$FRegioni->Query($query);
    	$risultati=$FRegione->GetResultArray();
    	$VAjac->SetDati('regioni',$risultati);
    	$VAjax->SetLayout('select');
    	return $VAjax->UseTemplate();
    	}
     
        public function GetProvincie($idregione)
    	{ 
    	  $FProvincia=USingleton::getInstance('FProvincia');
    	  $VAjax=USingleton::getInstance('VAjax');
    	  
    	  $query='SELECT _sigla,_provincia FROM `province`  WHERE _idregione='.$idregione.' ORDER BY _provincia;';
    	  $FProvincia->Query($query);
    	  $risultati=$FProvincia->GetResultArray();
    	  $VAjax->SetDati('array',$risultati);
    	  $VAjax->SetLayout('select');
    	  return $VAjax->UseTemplate();
        }
    	
     public function GetComuni($siglaprovincia)
     {
     $FComune=USingleton::getInstance('FComune');
     $VAjax=USingleton::getInstance('VAjax');
     
     $query="SELECT _idcomune,_comune FROM `comuni`  WHERE `_provincia`='".$siglaprovincia."' ORDER BY _comune;";
     $FComune->Query($query);
     $risultati=$FComune->GetResultArray();
     $VAjax->SetDati('array',$risultati);
     $VAjax->SetLayout('select');
     return $VAjax->UseTemplate();
     }
    
     
     }
    ?>
    questo sarebbe ajax_selected.tpl

    codice:
    {section name=i loop=$array}
    <option value="{$array[i][0]}">{$array[i][1]}</option>
    {/section}

    ora vi posto la pagina del javascript:

    codice:
    function assegnaXMLHttpRequest() 
    {
    
     var XHR=null;
    
     //nome del browser
     browserUtente=navigator.userAgent.toUpperCase();
    
            // browser standard con supporto nativo (non importa il tipo di browser)
      if (typeof(XMLHttpRequest)==="function" || typeof(XMLHttpRequest)==="object")
      {
       XHR=new XMLHttpRequest();
      }
    
      // browser Internet Explorer
      else if (window.ActiveXObject && browserUtente.indexOf("MSIE 4")<0) 
      {
                //versione 6
       if (browserUtente.indexOf("MSIE 5")<0)
       {
        XHR=new ActiveXObject("Msxml2.XMLHTTP");
       }
                //versioni 5 e 5.5
       else
       {
        XHR=new ActiveXObject("Microsoft.XMLHTTP");
       }
      }
        
     return XHR;
    }
    
    function getProvince()
    {
     var idregione=document.getElementById('regione').value;
     var param='index.php?controller=ajax&task=getProvince&regione='+idregione;
     //creazione della richiesta di tipo XHR
        var richiesta=assegnaXMLHttpRequest();
     //formulazione della richiesta
     richiesta.open('GET', param, true);
     //invio della richiesta
     richiesta.send();
     //gestione della richiesta e della risposta
        if (richiesta) 
     {
      richiesta.onreadystatechange=function() 
      {
       // verifica dello stato della richiesta
       if (richiesta.readyState===4) 
       {
        // verifica della risposta da parte del server
        if(richiesta.statusText==="OK")
        {
         //document.getElementById('provincia').innerHTML=richiesta.responseText;
         var risposta=richiesta.responseText;
         alert(risposta);
         var select=document.registrazione.provincia;
         addOption (select,chiave,valore);
         // qui ci vorrebbe un ciclo che le inserisse nelle select, ma come fare???
         if (risposta)  
         { 
          
           
          
          var values=risposta.split(' '); 
          while (select.options.length) 
          { 
           select.remove(0);
          }
          
         } 
                             
        }
       }
      }
     }
    }
    
    function addOption (select,chiave,valore) 
    { 
     var option=document.createElement('option'); 
     option.value=chiave; 
     option.text=valore; 
     try 
     { 
      select.add(option,null); 
     } 
     catch(e) 
     { 
      //per Internet Explorer 
      select.add(option); 
     }
    }


    se avete bisogno di ulteriori dettagli fatemi sapere, grazie!

  2. #2

  3. #3
    grazie della risposta, ma vorrei non utilizzare jquery.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.