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

    Passaggio variabile tra funzioni ?

    Salve

    Premetto che mi sto addentrando da pochissimo nello studio un po' più approfondito di JavaScript, visto vorrei usicchiare AJAX e sto cercando di fare i primi esperimenti.

    Il problema è nato nel momento in cui ho cercato di fare una funzioncina che mi permettesse di aggiornare il contenuto di più <div> senza refreshare la pagina... l'errore deve essere abbastanza banale ma sto diventando matto -_-

    Se qualcuno volesse prendersi la briga di indicarmi dove sto sbagliando gliene sarei molto grato

    Lo script è questo:

    codice:
    var xmlHttp;
    
    function createXMLHttpRequest() {
    	if (window.ActiveXObject) {
    		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    	}
    	else if (window.XMLHttpRequest) {
    		xmlHttp = new XMLHttpRequest();
    	}
    }
    
    function handleStateChange(id) {
    	if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
    		document.getElementById(id).innerHTML = xmlHttp.responseText;
    	}
    }
    
    function myRequest(page, element) {
    	alert('Pagina: ' + page);
    	alert('Elemento: ' + element);
    	createXMLHttpRequest();
    	xmlHttp.onreadystatechange = handleStateChange(element);
    	xmlHttp.open("GET",page,true);
    	xmlHttp.send(null);
    }
    e lo richiamo così:

    codice:
    	<ul>[*]Hello World[*]PHP info
    	[/list]
    Grazie sin da ora

  2. #2

  3. #3
    Su su, per favore, che ci sto diventando sclerato più di quello che già sono di mio

  4. #4
    xmlHttp.onreadystatechange = handleStateChange(element);
    in questo modo assegni a onreadystatechange
    la funzione handleStateChange.

    deve essere

    xmlHttp.onreadystatechange = handleStateChange;
    è come se facessi

    el.onclick=miafunzione(this);

    che deve essere

    el.onclick=function(){
    miafunzione(this);
    }

    Dai un occhio qui


    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    Dunque.. innanzitutto grazie per la risposta, ma mi sa che ad un certo punto mi son perso leggendo il link che mi hai passato..

    Penso si sia capito.. vorrei fare in modo di utilizzare una sola funzione, da richiamare come ho riportato, per aggiornare in maniera asincrona il contenuto del <div> che gli indico, di volta in volta. In realtà non riesco a capire l'errore dove possa essere, visto che gli assegno, a quell'evento una funzione che mi pare sia definita correttamente..

    (Nemmeno la console JavaScript di Firefox mi da errore... ma non funziona :S)

    Sareste così gentili da indicarmi di preciso l'errore, e magari dirmi come risolvere se possibile? :P

  6. #6
    Il problema è questo: tu usi un oggetto XMLHTTPRequest per fare due chiamate e alla seconda la prima viene soppressa.
    Alla prima chiamata, difatti viene richiesto un createXMLHttpRequest, successivamente al cambio di stato viene assegnatagli una funzione.
    Alla seconda richiesta si fa la stessa cosa andando a sovrascrivere oggetto e funzioni, pertanto si annulla la prima richiesta.

    Per poter procedere in tal senso devi creare un Array di oggetti.

    In genere uso una funzione che inizializza il numero di chiamate che si andranno ad effettuare

    codice:
    function ajaxObj(){
    this.Ajax=Ajax;
    };
    var myAjaxC=new Array;
    function initializeAjaxTB(howManyEntries){
    	for (i=0;i<howManyEntries;i++){
    	myAjaxC[i]=new ajaxObj()
    	}
    return ajaxObj;
    }
    Dove Ajax, nel mio caso, corrisponde ad un oggetto che comprende sia la richiesta che il gestore (oltre ad altre funzioni).
    Nel tuo caso dovresti costruirti un oggetto avanzato con una lista di argomenti o utilizzando il prototype.

  7. #7
    Hmmmm... diciamo che mi manca ancora qualche base mi sa per affrontare il discorso come lo hai impostato tu, ma vedrò di provvedere :P

    Nel frattempo ho risolto così:

    codice:
    var xmlHttp;
    
    function createXMLHttpRequest() {
    	if (window.ActiveXObject) {
    		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    	}
    	else if (window.XMLHttpRequest) {
    		xmlHttp = new XMLHttpRequest();
    	}
    }
    
    function Div1StateChange(id) {
    	if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
    		document.getElementById('div1').innerHTML = xmlHttp.responseText;
    	}
    }
    
    function Div2StateChange(id) {
    	if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
    		document.getElementById('div2').innerHTML = xmlHttp.responseText;
    	}
    }
    
    function myRequest(page,id) {
    	createXMLHttpRequest();
    	if (id == 1) {
    		xmlHttp.onreadystatechange = Div1StateChange;
    	}
    	else if (id == 2) {
    		xmlHttp.onreadystatechange = Div2StateChange;
    	}
    	xmlHttp.open("GET",page,true);
    	xmlHttp.send(null);
    }
    Diciamo che è un workaround non troppo pulito, ma serve allo scopo :P

  8. #8
    L'importante è che funzioni

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.