Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [Ajax] funzione restituisce response

    Ho questo semplice script ajax, utilizzato per estrarre dei dati da un db e stamparli a video aggiornandoli ogni secondo senza dover ricaricare la pagina.
    Non capisco per quale motivo, però, lo script stampa a video "undefined".

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml">
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <
    title>Documento senza titolo</title>

    <
    script type="text/javascript">

     function 
    createRequestObject() {  
         var 
    ro;  
         var 
    browser navigator.appName;  
         if(
    browser == "Microsoft Internet Explorer"){  
             
    ro = new ActiveXObject("Microsoft.XMLHTTP");  
         }else{  
             
    ro = new XMLHttpRequest();  
         }  
         return 
    ro;  
     }  
       
     var 
    http createRequestObject();  
       
     function 
    sndReq() {  
         
    http.open('get','leggi_server.php'); 
         
    http.onreadystatechange handleResponse;  
         
    http.send(null);  
     }  
       
     function 
    handleResponse() {  
         if(
    http.readyState == 4){  
             var 
    response http.responseText;  
                if(
    response){
                 return 
    response
             }
         }  
     } 
     
    window.onload = function(){
    cDate document.getElementById('chat'); 
    cDate.innerHTML sndReq(); 
    setInterval('cDate.innerHTML = sndReq()',1000); 
    }


    </script>
    </head>

    <body>

    <div id="chat">
    </div>

    </body>
    </html> 

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Hai provato a richiamare dal browser la pagina 'leggi_server.php' per verificare cosa restituisce?

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Originariamente inviato da br1
    Hai provato a richiamare dal browser la pagina 'leggi_server.php' per verificare cosa restituisce?

    ciao
    Sì, finchè non riesco a fare funzionare ajax, la pagina leggi_server.php restituisce sempre "Missione compiuta".

    Modificando la funzione in questo modo
    Codice PHP:
     function handleResponse() {  
         if(
    http.readyState == 4){  
             var 
    response http.responseText;  
                if(
    response){
                 
    alert(response);
             }
         }  
     } 
    ho osservato che ajax recupera correttamente il valore della variabile response, perchè l'alert mi dice Missioni compiuta.

    C'è un errore in questa parte di codice

    Codice PHP:
    window.onload = function(){
    cDate document.getElementById('chat'); 
    cDate.innerHTML sndReq(); 
    setInterval('cDate.innerHTML = sndReq()',1000); 
    Ma non capisco dove!!

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Prova cosi:
    codice:
    window.onload = function(){
    cDate = document.getElementById('chat');
    cDate.innerHTML = sndReq;
    setInterval('sndReq()',1000);
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Originariamente inviato da cavicchiandrea
    Prova cosi:
    codice:
    window.onload = function(){
    cDate = document.getElementById('chat');
    cDate.innerHTML = sndReq;
    setInterval('sndReq()',1000);
    Ciao,
    ahimè anche così non va.
    Mi stampa a video

    codice:
    function sndReq() { http.open("get", "leggi_server.php"); http.onreadystatechange = handleResponse; http.send(null); }

  6. #6
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    C'e' un errore concettuale... tu richiami una funzione che non restituisce alcun valore e ti aspetti un valore che invece restituisce un'altra funzione...
    ti conviene dichiarare pubblica la variabile "response" ed agire su questa al ritorno dalla funzione... o meglio ancora settare direttamente il contenuto di "chat" all'interno della funzione handleResponse()

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  7. #7
    Originariamente inviato da br1
    C'e' un errore concettuale... tu richiami una funzione che non restituisce alcun valore e ti aspetti un valore che invece restituisce un'altra funzione...
    ti conviene dichiarare pubblica la variabile "response" ed agire su questa al ritorno dalla funzione... o meglio ancora settare direttamente il contenuto di "chat" all'interno della funzione handleResponse()

    ciao
    Infatti... Ho settato direttamente il contenuto di "chat" all'interno della funzione handleResponse() ed ora funziona perfettamente con firefox. Explorer, invece, carica correttamente il valore dal server, ma poi, al primo refresh, ritorna undefined.
    Noto che il refresh causa un cattivo effetto: il testo scompare per qualche decimo di secondo e poi riappare. Esiste un sistema alternativo a quello che sto qui sviluppando, che evita questo fastidio?


    Ecco il codice
    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml">
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <
    title>Documento senza titolo</title>

    <
    script type="text/javascript">

    function 
    createRequestObject() {  
         var 
    ro;  
         var 
    browser navigator.appName;  
         if(
    browser == "Microsoft Internet Explorer"){  
             
    ro = new ActiveXObject("Microsoft.XMLHTTP");  
         }else{  
             
    ro = new XMLHttpRequest();  
         }  
         return 
    ro;  
    }  
       
    var 
    http createRequestObject();  
       
    function 
    sndReq() {  
         
    http.open('get','leggi_server.php');
         
    http.onreadystatechange handleResponse;  
         
    http.send(null);  
    }  
       
    function 
    handleResponse() {  
         if(
    http.readyState == 4){  
             var 
    response http.responseText;  
                if(
    response){
                 
    cDate document.getElementById('chat');
                 
    cDate.innerHTML response;
             }
         }  
    }

    window.onload = function inizializza(){
        
    sndReq();    
        
    setInterval('cDate.innerHTML = sndReq()',1000); 
    }


    </script>
    </head>

    <body>

    <div id="chat">
    </div>

    </body>
    </html> 

  8. #8
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Questa non l'ho capita...

    setInterval('cDate.innerHTML = sndReq()',1000);

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  9. #9
    Originariamente inviato da br1
    Questa non l'ho capita...

    setInterval('cDate.innerHTML = sndReq()',1000);

    ciao
    Grande! Il problema è proprio questo. Adesso in firefox non c'è più il fastidioso refresh e funziona perfettamente.
    Explorer, invece, non ricarica il contenuto. In pratica, il contenuto del file leggi_server.php è
    Codice PHP:
    <?php echo "Si modifica"?>
    e non appena modifico la stringa stampata e salvo, firefox aggiorna immediatamente il contenuto della pagina, cosa che explorer non fa neppure se clicco su refresh.

    Secondo me il problema è la funzione setInterval che non funziona correttamente in explorer. La mia convinzione che explorer sia un pessimo browser su cui far girare il web 2.0 si fa sempre più forte.

  10. #10
    Ho individuato il problema, ma non riesco a risolverlo:
    la trasmissione ajax funziona, come pure la funzione setInterval per il refresh.

    Non so per quale motivo, il contenuto del div non viene aggiornato in explorer.
    Anche modificando il codice in questo modo funziona correttamente in firefox, ma non in explorer.

    Codice PHP:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <
    html xmlns="http://www.w3.org/1999/xhtml">
    <
    head>
    <
    meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <
    title>Documento senza titolo</title>
    <
    meta http-equiv="pragma" content="no-cache">

    <
    script type="text/javascript">
    function 
    el(name_ID){
        return (
    document.all)?document.all[name_ID]:(document.layers)?document.layers[name_ID]:document.getElementById(name_ID)
    }

    function 
    scrivi_in(tuo_idcosa){
        if(
    document.layers){
            
    el(tuo_id).document.write(cosa)
            
    el(tuo_id).document.close()
        }
        else if(
    typeof(el(tuo_id).innerHTML)!='undefined'){
            
    el(tuo_id).innerHTML=cosa
        
    }
        else 
    alert('funzione non supportata dal browser in uso')
    }

    function 
    createRequestObject() {  
         var 
    ro;  
         var 
    browser navigator.appName;  
         if(
    browser == "Microsoft Internet Explorer"){  
             
    ro = new ActiveXObject("Microsoft.XMLHTTP");  
         }else{  
             
    ro = new XMLHttpRequest();  
         }  
         return 
    ro;  
    }  
       
    var 
    http createRequestObject();  
       
    function 
    sndReq() {  
         
    http.open('get','leggi_server.php');
         
    http.onreadystatechange handleResponse;  
         
    http.send(null);  
    }  
       
    function 
    handleResponse() {  
         if(
    http.readyState == 4){  
             var 
    response http.responseText;  
                if(
    response){
                    
    scrivi_in('contenitore'response)
             }
         }  
    }

    window.onload = function inizializza(){    
        
    setInterval('sndReq()',2000); 
    }


    </script>
    </head>

    <body>

    <div id="contenitore" style="position:absolute;top:100px;left:100px;"></div>


    [url="#"]scrivi: ciao[/url]

    <meta http-equiv="pragma" content="no-cache">
    </body>
    </html> 

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 © 2026 vBulletin Solutions, Inc. All rights reserved.