Visualizzazione dei risultati da 1 a 3 su 3

Discussione: [AJAX] popolare select

  1. #1
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969

    [AJAX] popolare select

    Con queste funzioni popolo una seconda select al cambiamento di una prima select.
    Se metto gli id direttamente nel codice funziona.
    Se invece metto gli id come argomenti non funziona.
    In poche parole non riesco a passare la variabile idSelect alla funzione updateSelect.
    Come faccio a passargliela?

    codice:
    			/*
    			 * Funzione per la popolazione di una select con id = idSelect e xml=fileXML alla selezione di una latra select con id= idPrincipale
    			 */
    			function populateSelect( idPrincipale, idSelect, fileXML )
    			{
    				//Recupero i dati da inviare
    				var mainSelection = document.getElementById( idPrincipale );
    				
    				//Creo un nuovo oggetto XMLHTTPRequest
    				var req = newXMLHttpRequest();
    				
    				//Invio la richiesta
    				req.open("POST", fileXML, true);
    				req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    				
    				//Invio i dati POST
    				req.send("id=" + mainSelection.options[mainSelection.selectedIndex].value);
    				
    				//Gestore dell'evoluzione dello stato dell'oggetto req
    				req.onreadystatechange = handleResponse(req, updateSelect(idSelect));				
    			}
    
    			
    			/*
    			 * Popolo la SELECT
    			 * XMLResult = Il risultato XML prodotto da handleResponse
    			 */
    			function updateSelect(XMLResult, idSelect)
    			{
    				//Gestisco il documento XML ricevuto e popolo la seconda SELECT
    				var categoria = XMLResult.getElementsByTagName('categoria');
    				
    				//Recupero la seconda SELECT
    				var subSelection = document.getElementById( idSelect );
    				
    				//Svuoto la seconda 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
    					}
    				}
    			}


    codice:
    			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;
    			}
    			
    			/*
    			 * 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.
    			 * req = 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);
    						}
    					}
    				}
    			}

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    req.onreadystatechange = function(){handleResponse(req, updateSelect(idSelect));}

  3. #3
    Utente di HTML.it L'avatar di Teuzzo
    Registrato dal
    Mar 2002
    Messaggi
    969
    Originariamente inviato da Xinod
    req.onreadystatechange = function(){handleResponse(req, updateSelect(idSelect));}
    Mi da errore: Proprietà o metodo non supportati dall'oggetto

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.