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

    AJAX, uso di XMLHTTPREQUEST

    C'è una cosa in AJAX che mi lascia perplesso a proposito della procedura XMLHTTPREQUEST. Sono abituato, in programmazione, a considerare la sequenzialità delle istruzioni. In questo caso, in un esempio che ho trovato su un libro trovo che la sequesnza è strana (anche se l'esempio, poi, funziona).
    dopo l'istanza

    xmlhttp=new XMLHttpRequest();

    compare l'istruzione che gestisce la risposta del server

    xmlhttp.onreadystatechange = handle() (handle è una funzione che gestisce la risposta)

    e DOPO compare l'istruzione che manda la richiesta al server

    xmlhttp.send(null);

    Come può la risposta PRECEDERE l'invio della richiesta? C'è qualcosa che mi sfugge.
    Qualcuno può chiarirmi le idee?
    Grazie

  2. #2
    onreadystatechange è un evento associato all'oggetto xmlhttp, che "scatta" quando lo stato di xmlhttp cambia.
    Le istruzioni da eseguire ad un certo stato dell'oggetto possono essere definite a priori ma verranno eseguite solo quando l'evento scatta cioè quando effettivamente c'è la risposta o quando la richiesta viene inviata o fallisce, ecc.

  3. #3
    Grazie lucavizzi.
    A questo punto però penso che se faccio una seconda istanza in un'altra parte del documento i due eventi onreadystatechange possono entrare in conflitto tra loro. E' così?

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Non è detto, anche se fatico a capire il nesso con la domanda precedente
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    se la posizione dell'evento onreadystatechange è indifferente vuol dire che è perennemente attivo (mi sembra) e quindi può entrare in conflitto con un altro richiamo fatto in un altro punto del documento.
    Sono alle prime armi con questo genere di tecnologia ma non come programmatore e quindi posso benissimo dire sciocchezze. Grazie comunque

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Originariamente inviato da fiumicello
    se la posizione dell'evento onreadystatechange è indifferente vuol dire che è perennemente attivo (mi sembra) e quindi può entrare in conflitto con un altro richiamo fatto in un altro punto del documento.
    Sono alle prime armi con questo genere di tecnologia ma non come programmatore e quindi posso benissimo dire sciocchezze. Grazie comunque
    Se posso darti dei consigli, non anticipare i tempi e non cercare similitudini con altri linguaggi di programmazione. Prima studiati bene il javascript come e dove funziona, gli eventi la sintassi, la logica, etc... poi passa ad ajax seguendo lo stesso percorso (ma sarà già più facile avendo le basi), e non cerca assonanze con altri linguaggi tipo php che a parte la similitudine nella scrittura la logica e gli ambienti sono completamente diversi tra loro.
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  7. #7
    Originariamente inviato da fiumicello
    Grazie lucavizzi.
    A questo punto però penso che se faccio una seconda istanza in un'altra parte del documento i due eventi onreadystatechange possono entrare in conflitto tra loro. E' così?
    Se l'oggetto in questione contenesse un elemento del DOM, il secondo evento sovrascriverebbe il primo, nel caso dell'oggetto xmlhttprequest non saprei... non ha molto senso definire due volte lo stesso evento...

  8. #8
    Originariamente inviato da fiumicello
    se la posizione dell'evento onreadystatechange è indifferente vuol dire che è perennemente attivo (mi sembra) e quindi può entrare in conflitto con un altro richiamo fatto in un altro punto del documento.
    Non è vero..

    Ogni volta che devi fare una richiesta asincrona istanzi un oggetto xmlHttpRequest separato.

    Ipotizzando di avere la classica funzione per richiamare l'oggetto:
    Codice PHP:
    var ajaxObject = {
        
    callXMLhttp: function () {
                    
    // classico codice cross-browser

            //restituisco l'istanza all'oggetto ajax
            
    return request;
        }

    ogni volta che richiamo un l'oggetto lo assegno ad una variabile diversa:
    Codice PHP:
    // una richiesta per i contenuti
    var oHttpContentReq ajaxObject.callXMLhttp();

    oHttpContentReq.onreadystatechange // tua callback
    oHttpContentReq.send()

    // una richiesta per i post
    var oHttpPostsReq ajaxObject.callXMLhttp();

    oHttpPostsReq.onreadystatechange // tua callback 
    in questo modo non hai problemi di conflitto tra le varie richieste
    Questa volta, più che un voto.. è favoreggiamento.

  9. #9
    Ho capito, grazie a tutti per avermi chiarito le idee.

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.