Ciao a tutti,
scusate se magari vi sottopongo un problema banale, ma programmo per hobby solo saltuariamente e quindi il mio codice non è dei migliori....
Ho questo problema : in una pagina web ho una combo box che, al variare del suo contenuto lancia una funzione ajax che sostituisce il contenuto di un'altra combo con il valore di una query mysql.
Fin qui tutto bene. Quando tramite un form faccio il submit dei dati nella pagina che li deve processare non vedo più il valore contenuto nella combo, ma solo con firefox e non con explorer!
Inserisco un pò di code così forse mi spiego meglio:
La mia pagina presenta una struttura di questo tipo:
codice:
<form method="post" enctype="mimetype" id="theForm" name="theForm" onSubmit="if (form_validator2(this) == true) javascript:xmlhttpPost('ris.php','theForm'); return false;" language="JavaScript" enctype="text/plain">
<?php
if(isset($_REQUEST['step'])){
switch ($_REQUEST['step']) {
case 0:
$id_cat= $_REQUEST['id_cat'];
$query= "SELECT G.id_gir, G.nome_gir, S.nome_s, S.id_s FROM (SELECT SQ.id_s, SQ.nome_s, S.ex_gir, S.ex_cat, S.ex_c FROM sub S INNER JOIN squadre SQ ON SQ.ex_mez=S.id_mez) S INNER JOIN gironi G ON S.ex_gir=G.id_gir WHERE S.ex_cat=" . $id_cat . " AND S.ex_c=2 ORDER BY G.nome_gir, S.nome_s";
$result= mysql_query($query) or die (mysql_error() . "Errore acquisizione nomi delle squadre");
?>
<select name="squadre_<?php echo $_REQUEST['name'];?>" id="squadre_<?php echo $_REQUEST['name'];?>">
<option value="0" selected="selected">Squadra:</option>
<?php
while ($rows=mysql_fetch_assoc(@$result)){ ?>
<option value="<?php echo $rows['id_s'];?>"><?php echo $rows['nome_s'];?>(<?php echo $rows['nome_gir'];?>)</option>
<?php } ?>
</select>
<?php
break;
}
} else{
?>
..
<tr style="margin-left:10px;">
<td>
<input type="text" name="cognome1" style="width:150px">
</td>
<td>
<input type="text" name="nome1" style="width:150px">
</td>
<td>
<select name="id_cat1" id="id_cat1" style="width:150px" onchange="show_squadre(1);">
<option value="scelta..." selected="selected">Categoria:</option>
<option value="10">Allievi</option>
<option value="9">Juniores</option>
<option value="11">Giovanissimi</option>
<option value="12">Esordienti</option>
<option value="14">Esordienti a 9</option>
<option value="15">Pulcini Misti</option>
<option value="16">Pulcini 2002</option>
<option value="17">Pulcini 2003</option>
</select>
</td>
<td>
<div id="show_heading1">
<select name="squadre_1" id="squadre_1">
<option value="99999" selected="selected">Squadra:</option>
</select>
</div>
</td>
<td>
<select name="ruolo1" id="ruolo1" style="width:150px">
<option value="Z" selected="selected">Ruolo:</option>
<option value="A" >Attaccante</option>
<option value="C" >Centrocampista</option>
<option value="D" >Difensore</option>
<option value="P" >Portiere</option>
</select>
</td>
</tr>
.....
...
...
e le funzioni ajax in gioco sono, tralasciando form_validator2:
codice:
function xmlhttpPost(strURL, name) {
var xmlHttpReq = false;
var self = this;
if(window.ActiveXObject) {
// Internet Explorer 5+
self = new ActiveXObject("Microsoft.XMLHTTP");
} else if(window.XMLHttpRequest){
// Firefox, Safari, Opera...
self = new XMLHttpRequest();
} else {
// se arriviamo in questo punto, probabilmente abbiamo a che fare con un vecchio browser e informiamo l'utente.
alert("Errore: non riesco a creare oggetto XMLHttpRequest");
}
//Apro il canale di connessione per regolare il tipo di richiesta.
//Passo come parametri il tipo di richiesta, url e se è o meno un operazione asincrona (isAsync)
self.open('POST', strURL, true);
//setto l'header dell'oggetto
self.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
// self.setRequestHeader("Content-Type","data");
/* Passo alla richiesta i valori del form in modo da generare l'output desiderato*/
self.send(recuperaValore(name));
/* Valuto lo stato della richiesta */
self.onreadystatechange = function() {
/*Gli stai di una richiesta possono essere 5
* 0 - UNINITIALIZED
* 1 - LOADING
* 2 - LOADED
* 3 - INTERACTIVE
* 4 - COMPLETE*/
//Se lo stato è completo
if (self.readyState == 4) {
/* Aggiorno la pagina con la risposta ritornata dalla precendete richiesta dal web server.Quando la richiesta è terminata il responso della richiesta è disponibie come responseText.*/
aggiornaPagina(self.responseText);
}
}
}
/*Questa funzione recupera i dati dal form.*/
function recuperaValore(name) {
var form = $('#'+name).serialize();
return form;
}
/*Questa funzione viene richiamata dall'oggetto xmlHttpReq per l'aggiornamento asincrono dell'elemento risultato*/
function aggiornaPagina(response){
$('form').remove();
$('title_g').remove();
$('title_c').remove();
var el=document.getElementById("span12");
el.outerHTML=el.outerHTML.replace(el.innerHTML,response);
}
function show_squadre(id){
$('#show_heading'+id).fadeOut();
$.post("andy.php", {
id_cat: $('#id_cat'+id).val(),
step: 0,
name: escape(id)
}, function(response){
setTimeout("finishAjax('show_heading"+escape(id)+"', '"+escape(response)+"')", 50);
});
return false;
}
/* Metodo usato per visualizzare gli oggetti caricati */
function finishAjax(id, response){
$('#'+id).html(unescape(response));
$('#'+id).fadeIn();
}
la variabile che perdo dopo il post è $_POST['squadre_x'] e lo fa solo in ff, in explorer funziona.
Qualche idea?
nick