Visibilita array di oggetti

di il
1 risposte

Visibilita array di oggetti

Salve a tutti. Ho questo problema:

dopo aver fatto una richiesta AJAX dovrei elaborare la risposta creando vari elementi di un array di oggetti identificati dalla funzione "prova(a,b)". Una volta uscito dalla funzione dove elaboro la risposta stessa, non ho piu visibilita' degli oggetti creati.

Questo è tutto il codice:

	<script type="text/javascript">
	function initialize() {

		function prova(a,b){
			this.aa = a;
			this.bb = b;
			return this;
		}

		var requestUrl = "http://localhost:8080/RSSIWatcher/GetObs.jsp";
		
		// AJAX request
		var request = new XMLHttpRequest();
		request.open("GET", requestUrl, true);
		
		request.onreadystatechange = function() {<------ FUNZIONE DOVE ELABORO LA RISPOSTA
			if (request.readyState == 4) {
				var resp = request.responseText;//resp del tipo: idsens,numobs,osservazioni separate con ";" "&" se non è l'ultimo
				if (resp != null){
					temp1 = resp.split("&");
					for(i = 0; i < temp1.length; i++){//splitto i sensori
						temp2 = temp1[i].split("$");//splitto la parte osservazioni dalla parte id-numobs
						temp3 = temp2[0].split(",");
						id = temp3[0];
						numObs = temp3[1];
						vectObs[0] = new prova(id,numObs); <-----------PROBLEMA: QUA CREO GLI ELEMENTI DELL'ARRAY
					}
				}
			}
		};
		document.form_task.xx.value = vectObs[0].aa;<--------- QUI VORREI AVERE LA VIDIBILITA DEGLI ELEMENTI DELL'ARRAY
		request.send(null);        
	}
	</script>

Esiste un modo?
cosa dovrei fare per avere visibilta anche fuori dalla initialize?

Grazie davvero tanto!

1 Risposte

  • Re: Visibilita array di oggetti

    Ciao abcdoefme

    Immagino che qui il problema non sia tanto di 'visibilità' ma riguardi l' ordine in cui viene eseguito il codice, le chiamate Ajax sono asincrone.
    
    01      // AJAX request
    02      var request = new XMLHttpRequest();
    03      request.open("GET", requestUrl, true);
    04      
    05      request.onreadystatechange = function() {<------ FUNZIONE DOVE ELABORO LA RISPOSTA
    06         if (request.readyState == 4) {
    07            var resp = request.responseText;
    08            if (resp != null){
    09               temp1 = resp.split("&");
    10               for(i = 0; i < temp1.length; i++){
    11                  temp2 = temp1[i].split("$");
    12                  temp3 = temp2[0].split(",");
    13                  id = temp3[0];
    14                  numObs = temp3[1];
    15                  vectObs[0] = new prova(id,numObs); <-----------PROBLEMA: QUA CREO GLI ELEMENTI DELL'ARRAY
    16               }
    17            }
    18         }
    19      };
    20      document.form_task.xx.value = vectObs[0].aa;<--------- QUI VORREI AVERE LA VIDIBILITA DEGLI ELEMENTI DELL'ARRAY
    21      request.send(null);        
    
    Dato che la funzione di risposta (riga 5) viene chiamata dopo che hai eseguito la send (riga 21), non puoi pretendere di leggere il valore (riga 19) prima che sia stato assegnato. Devi spostare l' assegnamento dentro la funzione di risposta.
Devi accedere o registrarti per scrivere nel forum
1 risposte