Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327

    doppia connessione asincrona AJAX sullo stesso evento

    Ho un sistema per popolare tag select dinamicamente in AJAX pescando dati da db con PHP tipo questo che avevo fatto a suo tempo:
    http://forum.html.it/forum/showthrea...hreadid=974067
    E fin qui va bene.
    Supponiamo che all'ochange di una select voglia, oltre che popolare un'altra select, cambiare anche il contenuto di un div sempre con una connessione asincrona.
    Non riesco a farlo funzionare.
    Ho racchiuso la mia connessione asincrona in una funzione popolaElemento() riutilizzabile che riceve come parametri il nome dell'id del tag da popolare, il metodo GET|POST (al momento gestisco solo il get), l'indirizzo della pagina PHP a cui devo connettermi per pescare i dati, e una stringona di parametri vari che mando alla pagina come querystring:
    codice:
    function createRequestObj(){ // creo un'istanza XMLHttpRequest
    	var re;
    	var browser=navigator.appName;
    	if (browser=="Microsoft Internet Explorer"){ // sniff browser
    		re=new ActiveXObject("Microsoft.XMLHTTP");
    	} else re=new XMLHttpRequest();
    	return re;
    }
    
    var http=createRequestObj();
    
    function popolaElemento(idElDaPopolare, paginaFonteDati, metodo, parametri){
    	var url=paginaFonteDati+"?" + parametri
    	http.open(metodo, url , true)
    	document.getElementById(idElDaPopolare).innerHTML="<img src=\"/immagini/ico/wait.gif\" />";
    	http.onreadystatechange=function(){
    		if (http.readyState==4 || http.readyState=="complete"){
    			if (http.status == 200){
    				document.getElementById(idElDaPopolare).innerHTML=http.responseText;
    			} else {
    				document.getElementById(idElDaPopolare).innerHTML="ERRORE "+http.status;
    			}
    		} // else document.getElementById(idElDaPopolare).innerHTML=http.readyState; // debug
    	}
    	http.send(null);
    }
    Ovviamente sulla mia select avrò due chiamate fatte così:
    codice:
    <select id="select1" onchange="popolaElemento('select2','popola.php','get','saluto=ciao'); popolaElemento('mioDiv','popola.php','get','saluto=buonanotte'); ">
    <option>...</option>
    </select>
    Non funziona.
    Viene popolato solo il tag che si trova prima nella pagina html, mentre nell'altro rimane l'immagine di caricamento. Non ricevo neanche un errore javascript.
    Ho provato a fare una funzione popolaElemento2() esattamente uguale alla prima e a chiamare quella per popolare il div.
    Ho provato a connettermi due pagine PHP diverse (per centralizzare il codice ne avevo fatta solo una con uno switch che in base alle variabili get visualizzav un contenuto piuttosto che un altro).
    Ho provato ad assegnare la chiamata a due eventi diversi, uno su onchange e uno su onclick...
    Nisba. Non funge.
    Dev'essere qualcosa di intimo all'XMLHttpRequest che non so...
    Nella seconda chiamata, http.readyState è 1 e non esegue l'if (http.readyState==4 || http.readyState=="complete")....
    Potete aiutarmi?
    /* Let's Lead the Web to Its Full Potential */

  2. #2
    Utente di HTML.it L'avatar di Cheope
    Registrato dal
    Dec 2003
    Messaggi
    327

    No... Non ci credo...

    Bastava spostare l'istanziazione dell'oggetto XMLHttpRequest dentro alla funzione...
    Così ad ogni popolamento viene istanziata una connessione diversa...

    Che dite, a 26 anni è meglio andare subito in pensione oppure aspetto?
    :rollo:
    /* Let's Lead the Web to Its Full Potential */

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.