Combo dinamica con Ajax-php

Ciao,

Tramite php e ajax sto cercando di popolare una combo in base ad una scelta fatta precedentemente (sempre da combo) con dati provenienti dal DB.

Sono quasi arrivato alla fine, infatti sembra funzionare, il problema č che quando incontro caratteri accentati mi da problemi con explorer, mentre su firefox va tutto bene.

Inizialmente pensavo fosse un problema proprio di explorer, perņ

se non uso ajax explorer non ha nessun problema a visualizzare i caratteri accentati nelle combobox.

Quindi l'errore potrebbe essere causato da javascrip oppure dal codice Xml

Ho pubblicato tutto a questo indirizzo:

www.rc-informatica.it/prova.php

Avete qualche consiglio da darmi??

 

inviato 10 anni fa
Riccardo81
X 0 X

Tutto mi fa pensare ad un problema di codifica del set di caratteri utilizzato ma non so indicarti come risolverlo. Riporta il codice che manipola le stringhe che mostrano il problema.

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Tutto mi fa pensare ad un problema di codifica del set di caratteri utilizzato ma non so indicarti come risolverlo. Riporta il codice che manipola le stringhe che mostrano il problema.

 :bye:

Ecco il codice della pagina:

<?php include("Connessione/connessione.php"); ?>
<?php include("funzioni/NormDatiDB.php"); ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<title>Test AJAX</title>
<script language="javascript" type="text/javascript">
function newXMLHttpRequest(){
var xmlreq = false;

//Controllo il tipo di oggetto XMLHttpRequest da utilizzare
if(window.XMLHttpRequest){
//Per browser non Microsoft
xmlreq = new XMLHttpRequest();
}else if(window.ActiveXObject){
//Cerco di creare l'oggetto via MS ActiveX
try{
//Nuove versioni per browser IE
xmlreq = new ActiveXObject("Msxml2.XMLHTTP");
}catch(e1){ //Errore riscontrato durante la creazione dell'oggetto
try{
//Precedenti versioni per browser IE
xmlreq = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e2){ //Nuovo errore durante la creazione dell'oggetto
xmlreq = false;
}
}
}
//Restituisco l'eventuale oggetto XMLHttpRequest
return xmlreq;
}


function populateSubSelection(){
//Recupero i dati da inviare
var mainSelection = document.getElementById("mainSelection");

//Creo un nuovo oggetto XMLHTTPRequest
var req = newXMLHttpRequest();

//Invio la richiesta
req.open("POST", "data.php", true);
req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

//Invio i dati POST
req.send("choice=" + mainSelection.options[mainSelection.selectedIndex].value);

//Gestore dell'evoluzione dello stato dell'oggetto req
req.onreadystatechange = handleResponse(req, updateSubSelection);
}

/*
* Ritorna una funzione per la gestione dello stato dell'oggetto req.
* Ed infine a stato finale raggiunto, invia la risposta XML alla funzione che dovra' gestire il tutto.
* reg = Istanza XMLHTTPRequest
* XMLHandler = nome della funzione a cui passare il risultato XML da gestire
*/
function handleResponse(req, XMLHandler){
return function(){
//Controllo se l'oggetto req ha raggiunto lo stato finale
if(req.readyState == 4){
//Inoltre accertiamoci di aver ottenuto il messaggio 200 dal server,
if (req.status == 200){
//A questo punto richiamo la funzione che gestira' il risultato XML
XMLHandler(req.responseXML);
}else{
alert("Errore HTTP: " + req.status);
}
}
}
}



/*
* Popolo la seconda SELECT
* XMLResult = Il risultato XML prodotto da handleResponse
*/
function updateSubSelection(XMLResult){
//Gestisco il documento XML ricevuto e popolo la seconda SELECT
var categoria = XMLResult.getElementsByTagName('categoria');

//Recupero la seconda SELECT
var subSelection = document.getElementById("subSelection");

//Svuoto la secondo SELECT
for (var i = subSelection.length - 1; i >= 0; i--)
subSelection.remove(i);

//Scorro gli elementi
for (var i = 0; i < categoria.length; i++){
//Recupero i vari elementi singoli
var item = categoria[i];

//Creo il nuovo elemento OPTION da aggiungere nella seconda SELECT
var NewOpt = document.createElement('option');
NewOpt.value = item.getAttribute("value");
NewOpt.text = item.firstChild.nodeValue;

//Popolo la seconda SELECT
try{
subSelection.add(NewOpt, null); //Metodo Standard, non funziona con IE
}catch(e){
subSelection.add(NewOpt); // Funziona solo con IE
}
}
}


</script>
</head>
<body>
Seleziona la REGIONE:
  <?php 
      $strsql = "select * from marca order by Marca"; 
      $query = mysql_query($strsql);       
    ?>
<form action="prova1.php" method="post">
<select name="Marca" id="mainSelection" onchange="populateSubSelection()">
<option value="">---</option>
<?php while($row=mysql_fetch_array($query)){?>      
<option value="<?php echo $row["Id_marca"];?>"><?php echo $row["Marca"];?></option>
<?php }?>
</select>
SELEZIONA PROVINCIA:
<select name="Modello" id="subSelection">
<option value="">---</option>
</select>
<label>
<input type="submit" name="Submit" value="Invia" />
</label>
</form>
</body>
</html>

Questa č la pagina per popolare la seconda pagina, credo che il problema dipendi da questa:

<?php include("Connessione/connessione.php");?>
<?php include("funzioni/NormDatiDB.php");?>
<?php
//Imposto un header XML
header("Content-type: application/xml");
header("Cache-control: no-cache, must-revalidate");

echo "<?xml version=\"1.0\"?>\n";
echo "<categorie>\n";

//Recupero la variabile sulla quale effettuare i vari controlli
$myChoice = @$_POST['choice'];
$strsql="select * from modello where Id_marca=".NormDatiDB($myChoice,"STR");
$query = mysql_query($strsql);       


while($row=mysql_fetch_array($query)){   
echo "\t<categoria value=\"".$row['Modello']."\">".$row['Modello']."</categoria>\n";

}
echo "</categorie>\n";
?>
risposto 10 anni fa
Riccardo81
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda