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

Discussione: AhAh ???

  1. #1
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116

    AhAh ???

    Da questo spunto:
    http://blog.html.it/archivi/2005/11/...ato-facile.php


    A parte il fatto che non vedo (mah, sono miope ) quali siano le differenze con AJAX, chiedo:

    Le librerie riportate negli articoli, funzionano? :master:

    Ho fatto una paginetta asp con due pulsanti che fanno una richiesta server ciascuno. Ho simulato una elaborazione server di qualche secondo. Ho pigiato in sequenza i due pulsanti ed il risultato è che non vedo le due risposte nello schermo. Il codice che ho usato è:
    codice:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
    <html>
    	<head>
    		<title>a</title>
    		<meta name="vs_defaultClientScript" content="JavaScript">
    		<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
    		<meta name="GENERATOR" content="Microsoft Visual Studio .NET 7.1">
    		<meta name="ProgId" content="VisualStudio.HTML">
    		<meta name="Originator" content="Microsoft Visual Studio .NET 7.1">
    	<script id="clientEventHandlersJS" language="javascript">
    <!--
    
    function Button1_onclick() {
    	ahah("a2.asp?ahah=button1", "div1")
    }
    
    function Button2_onclick() {
    	ahah("a2.asp?ahah=button2", "div2")
    }
    
    /*----------------------------------LIBRERIA AHAH----------------------------------------------*/
    function ahah(url,target) {
       // native XMLHttpRequest object
       document.getElementById(target).innerHTML = 'sending...';
       if (window.XMLHttpRequest) {
           req = new XMLHttpRequest();
           req.onreadystatechange = function() {ahahDone(target);};
           req.open("GET", url, true);
           req.send(null);
       // IE/Windows ActiveX version
       } else if (window.ActiveXObject) {
           req = new ActiveXObject("Microsoft.XMLHTTP");
           if (req) {
               req.onreadystatechange = function() {ahahDone(target);};
               req.open("GET", url, true);
               req.send();
           }
       }
    }   
    
    
    
    function ahahDone(target) {
       // only if req is "loaded"
       if (req.readyState == 4) {
           // only if "OK"
           if (req.status == 200 || req.status == 304) {
               results = req.responseText;
               document.getElementById(target).innerHTML = results;
    
    			          
               
           } else {
               document.getElementById(target).innerHTML="ahah error:\n" + req.statusText;
                   
               
           }
       }
    }
    
    
    
    var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
    var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
    var bMoz = (navigator.appName == 'Netscape');
    function execJS(node) {
      var st = node.getElementsByTagName('SCRIPT');
      var strExec;
      for(var i=0;i<st.length; i++) {     
        if (bSaf) {
          strExec = st[i].innerHTML;
        }
        else if (bOpera) {
          strExec = st[i].text;
        }
        else if (bMoz) {
          strExec = st[i].textContent;
        }
        else {
          strExec = st[i].text;
        }
        try {
          eval(strExec);
        } catch(e) {
          alert(e);
        }
      }
    }
    
    
    /*----------------------------------LIBRERIA AHAH----------------------------------------------*/
    
    //-->
    </script>
    </head>
    	<body MS_POSITIONING="FlowLayout">
    		<INPUT type="button" value="Button1" ID="Button1" NAME="Button1" language="javascript" onclick="return Button1_onclick()">
    		<INPUT type="button" value="Button2" ID="Button2" NAME="Button2" language="javascript" onclick="return Button2_onclick()">
    		<div id="div1"></div>
    		<div id="div2"></div>
    	</body>
    </html>
    
    <%
    dim a, b, i
    a = trim(Request.QueryString("ahah"))
    select case a
    	case "button1"
    	response.Clear
    	a = "":	for i=1 to 10000:a = a & "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx":next
    	response.Write("valore restituito da button1" & "<script>alert('codice button1');</script>")
    	response.End
    
    	case "button2"
    	response.Clear
    	a = "":	for i=1 to 10000:a = a & "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx":next
    	response.Write("valore restituito da button2" & "<script>alert('codice button2');</script>")
    	response.End
    
    end select
    
    
    %>
    Pietro

  2. #2
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    Ero incuriosito, ho fatto delle prove:

    cosi funziona:
    http://www.studio-mas.com/prove/testahah.asp

    ho aggiunto questo:

    A2.asp
    codice:
    response.Write("valore restituito da button1 <script id=""jsexec"" type=""text/javascript"">" & vbcrlf & "alert('codice button1');" & vbcrlf & "</script>")
    il type e i vbcrlf non cambiano nulla, ma ho aggiunto un id allo script.

    e al file
    codice:
    function ahahDone(target) {
       // only if req is "loaded"
       if (req.readyState == 4) {
           // only if "OK"
           if (req.status == 200 || req.status == 304) {
               results = req.responseText;
               document.getElementById(target).innerHTML = results;
    //NON MI SONO CURATO DEL CROSSBROWSER - c'è da sistemare execJs	
               eval(document.getElementById("jsexec").innerHTML);
    		   
               
           } else {
               document.getElementById(target).innerHTML="ahah error:\n" + req.statusText;
    		   
               
           }
       }
    }

  3. #3
    la differenza con AJAX (ma quante volte lo devo dire?) è che AHAH NON usa XML... con diversi vantaggi che non sto a ripetere...

    ma perchè avete aperto una discussione nuova?

    vabbè comunque potete provare la versione modificata da Daniele Florio (e anche un poco da me)
    http://www.gizax.it/vtre/tutorial.ph...re=3&lingua=IT

  4. #4
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    mi sembra di sentire la mi mamma da piccino quando faceva casino mio fratello e dava la colpa a tutte e 2

    Originariamente inviato da andrea.paiola
    ma perchè avete aperto una discussione nuova?


    cmq ho fatto un esempio di ahah per una select nazioni regioni comuni interdipendenti, se puo' essere utile a qualcuno
    eccolo
    a corredo del sorgente c'è il db dei comuni d'italia.
    L'esempio usa la classe dinamic select di teorema55

  5. #5
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da andrea.paiola
    la differenza con AJAX (ma quante volte lo devo dire?) è che AHAH NON usa XML... con diversi vantaggi che non sto a ripetere...

    ma perchè avete aperto una discussione nuova?

    vabbè comunque potete provare la versione modificata da Daniele Florio (e anche un poco da me)
    http://www.gizax.it/vtre/tutorial.ph...re=3&lingua=IT
    Te lo dico io quale è la differenza tra AJAX e AhAh.

    Tutto parte dalla creazione di un oggetto per richiesta web, che, naturalmente, è diverso a seconda del browser

    una volta creato l'oggetto req, si apre la connessione HTTP col metodo open mandando i giusti parametri

    Si manda pure il puntatore di una funzione di CallBack (ossia, onreadystatechange deve puntare ad una funzione dell'utente)


    nella funzione di CallBack dell'utente, si recupera:

    o objHTTP.responseText

    oppure
    objHTTP.responseXML


    cioè, a seconda delle circostanze, mi faccio restituire, o un testo semplice, o un testo con tag html, o un testo xml

    AhAh dice:
    non uso xml, non uso testo semplice, ma uso solo testo con tag html

    cioè non faccio mai per esempio, document.getElementById("textarea1").value = objHTTP.responseText;

    ma utilizzo SEMPRE document.getElementById("xxxx").innerHTML = objHTTP.responseText


    Ebbene, a volte questo non va bene. Se per esempio faccio una richista di tre informazioni, io le restituisco così:

    "informazione1|informazione2|informazione3"

    separo i tre campi e li metto nel posto giusto con, per esempio: elemeento.value = campo1***


    nel caso di AhAh è facile farsi due funzioncine parametrizzate, ma anche senza AhAh è oltremodo facile farsi due funzioncine parametrizzate che accettano pure la funzione di ritorno

    =================

    Per kluster

    Mi piace la tua soluzione. Io ho tentato così:
    codice:
    		if(req.status == 200) 
    		{
    			output = req.responseText;
    			document.getElementById(id_target).innerHTML = output;
    			var j = document.createElement("div");
    			j.innerHTML = "_" + output + "_";
    			execJS(j);
    
    		}
    acrocchio per IE (Con Firefox funziona anche senza )

    Per l'altro problema, le due funzioni ahah utilizzano l'oggetto richiesta http req in modo globale, perciò, se si fanno due richieste http in successione e la prima non ha avuto risposta, la seconda richiesta sovrascrive la prima, e si utilizzerà perciò solo l'ultima richiesta.

    C'è modo di risolvere, naturalmente, ma questo alla prossima puntata
    Pietro

  6. #6
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    Cmq vedo poco sicuro l'uso di ahah per eseguire degli eval di codice javascript.
    Non ho capito il concetto delle richieste successive.
    Sono scatenate di solito dall'evento del click dall'utente quindi al massimo basta mettere un disable temporaneo prima della chiamata e poi sull'onreadystatechange alla fine riabiliti l'eventuale oggetto che scatena la richiesta

  7. #7
    Utente di HTML.it L'avatar di pietro09
    Registrato dal
    Jan 2002
    Messaggi
    10,116
    Originariamente inviato da kluster
    Cmq vedo poco sicuro l'uso di ahah per eseguire degli eval di codice javascript.
    Non ho capito il concetto delle richieste successive.
    Sono scatenate di solito dall'evento del click dall'utente quindi al massimo basta mettere un disable temporaneo prima della chiamata e poi sull'onreadystatechange alla fine riabiliti l'eventuale oggetto che scatena la richiesta
    prima di tutto debbo rettificare che la funzione execJS funziona bene anche con IE senza l'acrocchio che ho fatto io. Però, se non sono diventato tonto del tutto , ieri, a casa, non mi funzionava


    Poi, quello che dici mi pare giusto, lanci la richiesta Http, disabiliti il pulsante, riabiliti alla risposta.
    Ma questo non toglie che il codice delle così dette libreria ahah, sia discutibile anche se è vero che ho voluto cercare il pelo nell'uovo.

    Comunque, ho corretto creando la variabile oggetto http, non globale, cioè non appartente all'oggetto window, con:

    rec = new .....

    ma con

    var rec = new ...

    e poi passando la variabile creata alla funzione ahahDone che avrà pertanto la firma
    fuction ahahDone(rec, url, parameters, target, ....


    per quanto riguarda la tua perplessità nell'uso di eval per recuperare codice javascript tramite ajax, sono del tuto parere e, per quanto mi riguarda, un bel iframe nascosto risolve brillantemente

    comunque, per non scoraggiare gli amici, con ajax si possono fare cose interessanti, per esempio lanciare una pagina server che fa una operazione lunga in modo asincrono. Spegnere il computer, prendersi un caffè, riaccendere e vedere nel browser l'andamento della operazione lanciata prima, naturalmente vedendo nello schermo la barra di avanzamento del lavoro in tempo reale...
    Pietro

  8. #8
    Vorrei domandare una cosa, forse sciocca ed ovvia!

    l'utilizzo di AHAH in effetti offre diverse possibilità in piu.

    davo un occhiata a:
    http://www.gizax.it/experiments/AHAH...gradabile.html

    è possibile chiamare tramite la funziona ahah una pagina php e passargli anche dei valori in maniera esplicita? esempio, non funzionante

    ahah('pagina.php?ID=0', 'GET');

    specifico che, so benissico che in questa maniera non è possibile, ma c'è appunto una forma nella quale sia possibile questo utilizzo?

    altra domanda, se si lavora con connessione ssl l'utilizzo di haha con firefox è possibile, ma ad ogni utilizzo l'utente viene avvisato che si sta effettuando una connessione non portetta, explorer si pianta!!

    c'è qualche soluzione in vista?

    Grazie ragà!

  9. #9
    Originariamente inviato da pirolisi
    Vorrei domandare una cosa, forse sciocca ed ovvia!

    l'utilizzo di AHAH in effetti offre diverse possibilità in piu.

    davo un occhiata a:
    http://www.gizax.it/experiments/AHAH...gradabile.html

    è possibile chiamare tramite la funziona ahah una pagina php e passargli anche dei valori in maniera esplicita? esempio, non funzionante

    ahah('pagina.php?ID=0', 'GET');

    specifico che, so benissico che in questa maniera non è possibile, ma c'è appunto una forma nella quale sia possibile questo utilizzo?
    certo e già lo si fa... anzi funziona così AHAH degradabile:
    se hai js attivo (e quindi puoi usare AHAH) le richieste vengono fatte da AHAH (e puoi richiedere sia pagine statiche che dinamiche)
    sennò le richieste vengono fatte a pagine dinamiche (coi parametri del caso) ch efanno quello che fa AHAH solo ch elo fanno in modo sincrono, richiedendo quindi il ricaricamento della pagina


    altra domanda, se si lavora con connessione ssl l'utilizzo di haha con firefox è possibile, ma ad ogni utilizzo l'utente viene avvisato che si sta effettuando una connessione non portetta, explorer si pianta!!

    c'è qualche soluzione in vista?
    sinceramente non ci siamo posti il problema di ssl per il momento... se avete info al riguardo scrivete!

  10. #10
    Utente di HTML.it L'avatar di kluster
    Registrato dal
    Jul 2003
    Messaggi
    1,288
    certamente per la richiesta
    il get puo' essere accodato alla richiesta
    codice:
    req.open("GET",URL,true);
    req.send(null);
    quindi basta un
    ahah('miapagina.php?var1=pippo&var2=pluto','layerD est')

    per una richiesta in post devi modificare la funzione per utilizzare i parametri in post (ed aggiungi la header del content type)
    codice:
    req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    //e poi i paramentri li invii nella richiesta
    var params = "var1=pippo&var2=pluto"
    req.open("POST",URL,true)
    req.send(params)

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.