Originariamente inviato da fcaldera
Ripeto: il problema è che mentre stai ancora aspettando la risposta (asincrona) viene eseguito l'if, per cui all'interno della funzione inviapost otterrai il valore correttamente, mentre al di fuori invece no

ti basta definire una funzione di callback, ad es.


codice:
function inviaPOST(pagina, dati, callback) {
	if (ajax) {
		// inizializzo la richiesta in post
		ajax.open("post", pagina, true);
		
		// imposto il giusto header
		ajax.setRequestHeader("content-type", "application/x-www-form-urlencoded");
		ajax.setRequestHeader("connection", "close")
		
		// effettuo la richiesta inviando i dati formati da coppie chiave-valore
		// dati = escape(dati);
		ajax.send(dati);
		
		ajax.onreadystatechange = function() {
			if(ajax.readyState === 4) {
				if(ajax.status == 200) {
					return callback(ajax.responseText);
				}else{
					alert("Operazione fallita, errore numero " + ajax.status);
					return null;
				}
			}
		}
	}
}


function controlloErrore(id_elem, id_span) {
	var risposta = null;
	inviaPOST('controllo.php', 'azione=... , function(risposta) {
	      if (risposta) {
		    if (risposta != '') {
			prendiElementoDaId(id_elemento).className = 'textbox2';
			cambiaTesto(id_span, risposta);
		    }else{
			prendiElementoDaId(id_elemento).className = 'textbox1';
			cambiaTesto(id_span, '');
		    }
	      }
      });
}
la parte in rosso la cambi di volta in volta, facendo eseguire funzioni diverse con la risposta
Dal mio ultimo post infatti mi sono reso conto che avevi ragione, ma non sapevo come risolvere. Interessante la tua soluzione, non sapevo che ad una funzione si potesse inviare come parametro un'altra funzione (come sono ignorante ).
Grazie.

Un ultima domanda: ma se io volessi mettere un return risposta alla fine della funzione controlloErrore poi va? Oppure in che punto la devo inserire?