Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: problemi con AJAX

  1. #1

    problemi con AJAX

    Salve a tutti ...

    Espongo il mio problema .. Sono consapevole che ci sono diverse soluzioni per farlo ma chiedo se c'è un modo semplice che non usi tecnologie diverse da javascript e php ..(no jquery etc..)

    praticamente, carico dinamicamente una lista(<select>).

    Alla scelta da parte dell'utente di un elemento della lista,devo caricare dinamicamente un'altra lista.

    quindi associo all'evento onChange della prima select, questa funzione :
    var xmlHTTP = null

    Codice PHP:
    function caricaProvince(regione
    {     
    alert("ok, sono nella funzione");     
    //regione_selezionata = regione.options[selectedIndex].value;     //alert(regione_selezionata);           
    var regione_selez regione.options[regione.selectedIndex].value;     
    var 
    url "caricaProvince.php?regione="regione_selez;     
    alert(regione_selez);          
    xmlHTTP getXMLHttpRequest();     // RITORNA UN ISTANZA DI XMLHttpRequest;
    xmlHTTP.onreadystatechange=riempiMenu;     
    xmlHTTP.open("GET",url,true);     
    xmlHTTP.send(null)

    a questo punto parte la pagina php richiamata si comporta in questo modo :
    codice:
    <?php
    $connessione = mysql_connect("localhost","nick","passw");  
    if($connessione) 
    { 	
    $db = mysql_select_db("my_ispanico5"); 	 	
    if($db) 	
    { 		
    $query="SELECT Province.nome FROM Province, Regioni WHERE Regioni.id = Province.id AND Regioni.nome = '$regione'"; 		 		
    $result = mysql_query($query); 		 		
    if($result) 		
    echo "<select name=\"province\" >";
    { 			
    while($riga = mysql_fetch_array($result)) 			
    { 				
    echo "<option value=\"".$riga["nome"]."\">".$riga["nome"]."</option>"; 			
    }
     echo "</select>";			
    } 
    
    } 
    } 
    ?>
    il mio problema più grande... E' che devo ora trattare questa nuova select creata con la funzione RiempiMenu che risponde ad xmlHTTP.onreadystatechange...

    Come faccio a popolare la <select> ?!?

    Grazie per l'aiuto, sono proprio in panne !

  2. #2
    Utente di HTML.it
    Registrato dal
    Dec 2010
    Messaggi
    3,660
    Come faccio a popolare la <select> ?!?
    la select è già popolata da php, perche vuoi ripopolarla con javascript?

    Mentre per richiamare la funzione ti dovrebbe bastare dichiararla in questo modo:

    codice:
    function RiempiMenu(){
    }

  3. #3
    Grazie per la risposta, ma non funziona :/ ..

    Quindi mi basta riempire tramite php la <select> ?!?


    La query funziona, l'ho testata ... faccio questo :

    codice:
    function riempiMenu() 
    { 	
    alert("sono all'inizio di riempiMenu"); 	
    if(xmlHTTP.readyState = 4) 	
    { 		
    alert("ready state = 4 "); 		
    if(xmlHTTP.status== 200) 		
    { 			
    alert("status = 200 "); 			
    alert("sono nel corpo di riempiMenu");
    var province = document.input2.province; 
    province.removeAttribute("disabled"); 		
    } 		 	
    } 
    }
    ma non funziona ....

    ti riporto anche la pagina principale :

    codice:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <script src="province.js"></script>  
    <script src="xmlHttpRequestIE.js"></script>  
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>esame2</title>   
    </head>  
    <body> 
    <h2 style="color:#F00; text-align:center"> INFORMAZIONI STATISTICHE ITALIANE </h2> 
    <hr /> 
     
      
    
    <?php  
    $connessione = mysql_connect("localhost","nick","passw");  
    if($connessione) 
    { 	
    $db = mysql_select_db("my_ispanico5"); 	 	
    if($db) 	
    { 		
    echo "ora faccio la query\n"; 		
    $query = "SELECT Regioni.nome FROM Regioni"; 		 		
    $result = mysql_query($query); 		 		
    if($result) 		
    { 
    ?>		 			
    
    <form name="input1" action="#"> 			
    <select name="regioni" onChange="caricaProvince(this)">             
    <option value="">seleziona una regione</option> 
    <?php 			
    echo "FACCIO IL WHILE"; 			
    while($riga = mysql_fetch_array($result)) 			
    { 				
    echo "<option value=\"".$riga["nome"]."\">".$riga["nome"]."</option>"; 			
    } 
    ?> 			
    </select>             
    </form> 
    <?php 		
    } 	
    } 	 
    } 
    ?>             
    
    <form name="input2" action="#">             
    <select name="province" disabled="disabled">             
    <option value=""> seleziona una provincia</option>                        
    </select>            
    </form>                          
    <input type="radio" name="percentuale" value="perc" disabled="disabled"/>Percentuale             
    
                 
    <input type="radio" name="val_assoluto" value="valass" disabled="disabled"/>Valore assoluto 			
    
                 
     
    <script type="text/javascript"> function prova() { 	alert("OK"); } </script>  
    
    </body> 
    
    </html>

    mi esce 3-4 volte questo alert quì
    codice:
    alert("sono all'inizio di riempiMenu");
    e non funge....

    cosa sbaglio ?!?


    Cmq grazie, pensavo che non potevo popolare la select da php ma dovevo farlo da javascript ... Almeno a livello teorico è giusto quindi?!?


  4. #4
    cambia la regione e vuole le nuove provincie.
    Il problema è, son sempre le stesse domande - non è colpa sua ma dopo un po' e ci si stanca.

    onreadystatechange dovrebbe accogliere una funzione che ammetta la response
    onreadystatechange=function(){RiempiMenu(risposta) ;}

    intanto controlla che a questa maniera ti dia una risposta

    function RiempiMenu(risposta){alert(risposta)}

    il tuo php deve prendere le provincie e metterle in una array, poi quando le ha raccolte tutte fai l'implode della array con una virgola come joiner. A quel punto lo mandi in echo dal php, e dovrebbe apparirti nell' alert.

    Intanto assicurati che questo accada - e sei a metà.
    Ri-Popolare poi la select è una sciocchezza a quel punto.

    ps
    if(xmlHTTP.readyState = 4)
    no, semmai
    if(xmlHTTP.readyState == 4)

  5. #5
    Immagino e ti capisco..

    per me è una novità ...

    Nel mio php... come faccio a dichiare un array di grandezza arbitria?!?

    Non posso mai sapere dal db quante province carica...

  6. #6
    $unnome=array();

    php non impone limiti alla dimensione di una array.

  7. #7
    Ti riporto le pagine ...

    Non funziona :

    codice:
    // JavaScript Document
    
    var xmlHTTP = null;
    
    
    function caricaProvince(regione)
    {
    	alert("ok, sono nella funzione");
    	//regione_selezionata = regione.options[selectedIndex].value;
    	//alert(regione_selezionata); 
    	
    	var regione_selez = regione.options[regione.selectedIndex].value;
    	var url = "caricaProvince.php?regione="+ regione_selez;
    	alert(regione_selez);
    	
    	xmlHTTP = getXMLHttpRequest();
    	xmlHTTP.onreadystatechange=RiempiMenu(risposta);
    	xmlHTTP.open("GET",url,true);
    	xmlHTTP.send(null);
    }
    
    function RiempiMenu(risposta)
    {
    	alert(risposta);
    }

    la pagina php
    codice:
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <?php
    $regione = $_GET["regione"];
    
    $connessione = mysql_connect("localhost","nick","passw");
    
    if($connessione)
    {
    	$db = mysql_select_db("my_ispanico5");
    	
    	if($db)
    	{
    		$query="SELECT Province.nome FROM Province, Regioni WHERE Regioni.id = Province.id AND Regioni.nome = '$regione'";
    		
    		$result = mysql_query($query);
    		
    		if($result)
    		{
    			$unnome=array();
    			$i = 0;
    			while($riga = mysql_fetch_array($result))
    			{
    				$array[$i] = $$riga["nome"];
    				$i++;
    				//echo "<option value=\"".$riga["nome"]."\">".$riga["nome"]."</option>";
    				//echo "<item>
    ";
    				//echo $riga["nome"];
    				//echo "
    </item>
    ";
    			}
    			implode(",",$unnome);
    		}
    	}
    }
    ?>
    non và :/

  8. #8
    a parte che penso non funzionerà comunque, però io avevo scritto una altra cosa...
    onreadystatechange=function(){RiempiMenu(risposta) ;}

    e non
    onreadystatechange=RiempiMenu(risposta);

  9. #9
    Si ho modificato... Ma non funziona infatti ..

    Non riesco a capire il perchè ...

    Sia di onreadystatechange così, senza la sua istanza ..
    Sia perchè non funziona ..

    Con un pò di pazienza, potresti spiegarmi o illustrarmi ?

    Grazie !

  10. #10
    perchè stai usando male ajax infatti

    function ajaxFunction(){
    var ajaxRequest;

    try{
    ajaxRequest = new XMLHttpRequest();
    } catch (e){
    // Internet Explorer
    try{
    ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
    try{
    ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e){
    alert("Ajax non supportato");
    return false;
    }
    }
    }
    ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){
    RiempiMenu(ajaxRequest.responseText);
    }
    }
    ajaxRequest.open("GET", "mettiLaUrlqui.php", true);/*<...... metti la url!!*/
    ajaxRequest.send(null);
    }

    function RiempiMenu(risposta){alert(risposta)}

    in caricaProvince anzichè
    xmlHTTP = getXMLHttpRequest();
    xmlHTTP.onreadystatechange=RiempiMenu(risposta);
    xmlHTTP.open("GET",url,true);
    xmlHTTP.send(null);
    metti solo:
    ajaxFunction();

    prova un po' sta cosa via

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.