Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    funzione che va solo se inserisco un alert (?!)

    Per me è un mistero della fede.
    Ho questa funzione:

    codice:
    function getstructure(uni,id){
    
    	alert(uni);
    	
    	var uni = uni;
    	var id = id;
    	var unita = document.getElementById(uni);
    	var valore = unita.value;
    	var id_unita = document.getElementById(id); 
    	if (valore != '') {
    
    	http.open('GET','get.php?id='+valore, true);
    	http.onreadystatechange = function() { getState(uni,id); };
    	http.send(null);
    	
    	
    	} 
    	}
    E' una funzione che si innesca in automatico in un ciclo for al Load di una pagina per popolare automaticamente dei menu dinamici in base a un database.
    A parte ciò.
    Prima che inserissi quell'inutile alert all'inizio, la funzione non funzionava o meglio, funzionava parzialmente. Dopo aver inserito l'alert, funziona.
    Inutile dire che io NON voglio l'alert, ma se lo levo, la funzione non va di nuovo.
    Ma com'è possibile??
    Come faccio?
    Grazie!

  2. #2
    dipende da dove vai a chiamare getstructure(), non è che hai l'esempio online? in caso negativo metti anche il resto del JS dove viene definito la funzione di onload
    I DON'T Double Click!

  3. #3
    Purtroppo non ho l'esempio online..
    E' un ciclo for che però non è all'interno di on OnLoad, è solo un for che costruisce la pagina e i menu. All'interno di questo for (che però è enorme, vale lapena postarlo tutto?), c'è questo richiamo alla funzione:

    codice:
    for ($i=1; $i<8; $i++) { 
    
    [...]
    
    ?>
    
    <script language='javascript'>
    								
    	getstructure("unita<?php echo $i ?>","id_unita<?php echo $i ?>");
    								
    								</script>
    <?php
    
    [...]
    }

  4. #4
    domanda: ma la variabile http dove viene definita?
    I DON'T Double Click!

  5. #5
    Subito prima della funzione getstructure().
    Esattamente così:

    codice:
    var http = createRequestObject();
    var where = (navigator.appName == "Microsoft Internet Explorer") ? -1 : null; 
    function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
    ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
    ro = new XMLHttpRequest();
    }
    return ro;
    }

  6. #6
    ma è globale allora! È chiaro che fa casino se deve inviare N richieste in contemporanea con solo un XMLHttpRequest object. Vedi di mettere l'instanziazione dell'oggetto http nella funzione getstructure e mettilo come variabile LOCALE alla funzione.
    I DON'T Double Click!

  7. #7
    Oh!
    E' questo il casino? Chiedo scusa, non sono affatto un'esperta di Ajax, nè Javascript. Grazie.
    Allora lo inserisco nella funzione...provo subito, grazie!

  8. #8
    Eh...il problema però così è che getstructure() ad un certo punto richiama getState():

    codice:
    http.open('GET','get.php?id='+valore, true);
    	http.onreadystatechange = function() { getState(uni,id); };
    	http.send(null);
    ...e anche getState ha bisogno della variabile http.
    Devo includere tutto in una macrofuzione?

  9. #9
    scusa, se te lo faccio notare, ma sinceramente tutti 'ste richieste AJAX sono inutili, è meglio se ne fai una di richiesta che ti ritorni tutti i dati e poi le gestisci con JS.

    Comunque, se non sei un'esperta di JS, allora ti converrebbe iniziare un po' da quello e con progetti più piccoli (fare script mono uso e roba simile per imparare), e passare poi ad AJAX quando hai un po' più di esperienza.
    I DON'T Double Click!

  10. #10
    eh sì volendo sì, ma questa funzione che poi è l'unica di ajax che uso perchè mi serve al momento, funzionava perfettamente. Poi ho fatto solo una modifica per far sì che venga richiamata in automatico oltre che alla selezione del menu e si sono creati questi problemi. Dato che in tutto il resto fa il suo lavoro alla grande e che anche con questa modifica poi funzionava quasi del tutto, speravo la soluzione fosse a portata di mano.

    Grazie mille

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.