Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    14

    ajax evento click pulsante

    Ciao a tutti! Sto studiando ajax e mi trovo in difficoltà nel capire alcune cose. Vi posto il codice in esame:

    var myRequest = null;


    function CreateXMLHttpReq(handler){
    var xmlhttp = null;
    xmlhttp = new XMLHttpRequest();
    xmlhttp.onreadystatechange = handler; // memorizza una funzione da chiamare ogni volta che la proprietà di readyState cambia
    return xmlhttp;
    }


    function myHandler(){
    if(myRequest.readyState == 4 && myRequest.status == 200){
    alert(myRequest.responseText);
    }
    }


    function esempio3(){
    myRequest = CreateXMLHttpReq(myHandler);
    myRequest.open("GET", "prova.php");
    myRequest.send(null);
    }

    Questo codice funziona, ma non riesco a capire perchè. In particolare quando chiamo la funzione esempio3 alla funzione CreateXMLHttpReq cosa gli viene passato (myHandler)? Mi potete far capire cosa succede effettivamente all'esecuzione del codice? Grazie mille per la disponibilità

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Gli viene passata la funzione myHandler, che verrà chiamata a ogni cambio di stato dell'istanza di XMLHttpRequest appena creata.

    Quel codice ha due problemi però (anche se funziona):
    1. Ha una sintassi di una decina di anni fa;
    2. Crea inutilmente una variabile globale (myRequest) invece di usare l'oggetto this come buona prassi vorrebbe.

    Ti giro una versione semplificata dello stesso codice:

    codice:
    <!doctype html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>Chiamata AJAX</title>
    <script type="text/javascript">
    function listenResp () {
        alert(this.responseText);
    }
    
    function AJAXCall () {
        var oReq = new XMLHttpRequest();
        oReq.onload = listenResp;
        oReq.open("GET", "prova.php", true);
        oReq.send(null);
    }
    </script>
    </head>
    
    <body>
    
    <p><input type="button" onclick="AJAXCall();" value="Chiamata AJAX!" /></p>
    
    </body>
    </html>
    P.S. Usa sempre il tag code quando posti del codice.
    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    14
    grazie per la dritta. Ma questa condizione non è più necessaria?

    codice:
    if(myRequest.readyState == 4 && myRequest.status == 200)

    Ultima modifica di Felcone; 01-02-2015 a 11:40

  4. #4
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    No, quella condizione sarebbe necessaria se avessi usato l'evento oReq.onreadystatechange (come nel tuo codice), che viene scatenato a ogni cambio di stato: l'evento oReq.onload invece viene scatenato solo a risposta ricevuta con successo, il che significa che non serve più verificare alcunché (lo ha già fatto il browser). Opzionalmente puoi aggiungere una funzione che venga scatenata in caso di errore, con oReq.onerror.
    Tutto ciò che fai con jQuery puoi farlo meglio e con la metà del codice in puro JavaScript.

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.