Newsgroup: it.comp.lang.javascript
Titolo: Ricarica combo con ajax

Ho un form in cui l'utente inserisce dei valori nelle text e va a
scegliere delle opzioni da delle combo, ed alcune di queste combo
ricaricano la pagina che effettua delle query con i valori scelti.
Es: ho una text prezzo e 2 combo, regione e provincia: l'utente
inserisce il prezzo, sceglie la regione e la pagina si ricarica facendo
una query con la regione scelta e caricando dinamicamente la combo
provincia.
Come faccio a ricaricare solo la seconda combo, senza ricaricare tutta
la pagina e quindi senza perdere i dati inseriti dall'utente con
ajax?!?!
Vi sarei estremamente grato se mi poteste aiutare.
Thanks

Cercando tra i post inseriti ho trovato questo codice:
/////////////////////////////////////////////
function RSobj() {
  var HTTPobj;
  if (window.ActiveXObject) HTTPobj = new
ActiveXObject("MSXML2.XMLHTTP");
  else HTTPobj = new XMLHttpRequest();
  return HTTPobj;
}
function ajaxGETin(urlget, comp, inna) {
	var HTTPobj = new RSobj();
	HTTPobj.open("GET", urlget, true);
	HTTPobj.send(null);
	HTTPobj.onreadystatechange = function() {
		if (HTTPobj.readyState == 4) {
          if (inna == 1) document.getElementById(comp).innerHTML =
HTTPobj.responseText;
          else if (inna == 2) document.getElementById(comp).innerHTML
+= HTTPobj.responseText;
		  if (document.ActiveXObject) HTTPobj.abort();
		}
	}
}
/*function ajaxPOSTxx(urlpost, comp) {
	var HTTPobj = new RSobj();
	var postData = "?testo=ciao";
	HTTPobj.open("POST", urlpost, true);
	HTTPobj.setRequestHeader("Content-Type",
"application/x-www-form-urlencoded");
    HTTPobj.setRequestHeader("Content-length", postData.length);
    HTTPobj.setRequestHeader("Connection", "close");
    HTTPobj.onreadystatechange = function() {
      	if (HTTPobj.readyState == 4) {
          if (HTTPobj.responseText == "OK") alert('ok');
          else if (HTTPobj.responseText == "LOGIN") alert('please
login');
          else alert(HTTPobj.responseText);
          //document.getElementById(comp).innerHTML =
HTTPobj.responseText;
		  if (document.ActiveXObject) HTTPobj.abort();
		}
    }
  HTTPobj.send(postData);
}*/
/** Oggetto "Remote Scripting Form"
  * crea un form per inviare dati attraverso l'oggeto HTTP
  * param id: l'id del form
  */
var RSForm = function (id) {
	// Imposta la variabile di classe form come il form passato
	this.form = document.getElementById(id);
	// Prende method e action del forum
	this.method = this.form.method;
	this.action = this.form.action;
	// Crea una variabile nulla per l'oggetto HTTP
	this.HTTPobj = null;
	// Crea un metodo nullo per il cambiamento di stato dell'oggetto HTTP
	this.onreadystatechange = function() { }
}
/** Metodo send dell'oggetto RSForm
  * Deve essere attivato all'onSubmit del form, e si occupa di inviare
i dati
  */
RSForm.prototype.send = function() {
	// Riferisce la variabile form alla variabile di classe form
	var form = this.form;
	// Crea l'oggetto HTTP
	this.HTTPobj = RSobj();
	var HTTPobj = this.HTTPobj;
	// Associa il metodo onreadystatechange della classe a quello
dell'oggetto HTTP
	HTTPobj.onreadystatechange = this.onreadystatechange;
	// Crea una variabile vuota con i dati da passare
	var data = "";
	// Per ogni elemento del form
	for (var i=0; i < form.elements.length; i++) {
		// Se il tipo è diverso da submit
		if (form.elements[i].type != "submit") {
			// Se non è il primo valore aggiunge la & per concatenare i valori
			if (i != 0) { data += "&"; }
			// Aggiugne ai dati "nome=valore" del campo
			data += form.elements[i].name +"="+ form.elements[i].value;
		}
	}
	// Invia i dati alla pagina tramite il metodo specificato nel form
    HTTPobj.open(this.method, this.action, true);
  	HTTPobj.setRequestHeader('Content-Type',
'application/x-www-form-urlencoded');
	HTTPobj.setRequestHeader('Content-length', data.length);
	HTTPobj.setRequestHeader('Connection', 'close');
	HTTPobj.send(data);
}
///////////////////////////////////////////
Nel sito dove è stato utilizzato viene richiamato al select di una
combo, proprio come serve a me, ed io l'ho integrato nella mia pagina
in questo modo:
//////////////////////////////////////////
<select
onchange="ajaxGETin('cerca.php?id_stato='+this.options[this.selectedIndex].value,
'componenteajax', 1)" name="">
          <option></option>
          <option value="1">primo</option>
          <option value="2">secondo</option>
          <option value="3">terzo</option>
        </select>
//////////////////////////////////////////
Nell'esempio viene creata la combo dal nulla al posto di questo:
//////////////////////////////////////////
<div id="componenteajax"><em>seleziona uno stato!</em></div>
//////////////////////////////////////////
Il mio problema è che io la combo già ce l'ho, la devo solo
ricaricare al select della prima combo, però mettendo dentro il div la
suddetta combo mi ricarica tutto il sito dentro la pagina!
Dove sbaglio!?!?

 ajax?!?!
... con ajax ... se lo hai già usato sai come fare, prova e posta il
risultato (non quel codice lunghissimo che hai postato dicendo "ho trovato
questo codice"...)
-- 
"Ho smesso di fumare.
 Vivrò una settimana di più.
 E in quella settimana pioverà a dirotto"
									    W.A.

 questo codice"...)
Scusate per la lunghezza del codice postato, ma sto davvero incartato!
Allora per semplificare, il codice che sto usando adesso è questo:
<script language="javascript">
function cerca_f() {
  var ajax_obj;
     var valorecampo =
document.cerca.stato.options[document.cerca.stato.selectedIndex].value;
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        ajax_obj = new XMLHttpRequest();
        ajax_obj.onreadystatechange = function ricevi(){
			var strRes;
			var arrValori;
			  if (ajax_obj.readyState == 4) {
				  strRes=ajax_obj.responseText;
            				  arrValori=strRes.split("|");
				  document.cerca.regione.options.length=0;
				  for(i=0;i<arrValori.length;i++)  {
					document.cerca.regione.options[document.cerca.regione.options.length]=
new Option(arrValori[i].split("|"));
				  }
			  }
		}
        ajax_obj.open("GET", "cerca.php?id_stato="+valorecampo,true);
        ajax_obj.send(null);
    }
Il problema è che dentro l'oggetto ajax_obj.responseText mi memorizza
tutto lo script javascript, una cosa assurda!
Come faccio a memorizzare solo le informazioni che mi servono?!?!