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®ione='+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!