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

    [PHP-Javascript-AJAX]Ho sbagliato qualcosa?

    ciao!!
    oggi ho provato a creare il mio primo script AJAX...
    la mia idea era di fare una chat, con una pagina con javascript che richiede e legge i dati forniti da una pagina php che non fa altro che andare a cercare nel database l'ultimo messaggio inserito...oppure invia, con GET, il messaggio da inserire nel database a una pagina php diversa.
    (questa è la mia prima prova con AJAX-->non ridete di me)
    per inserire i dati nel database la cosa non è molto complicata...
    il mio problema era richiamare la pagina php che legga e scriva l'ultimo messaggio presente nel database.
    io ho fatto un bellissimo timer, che parlte al caricamento della pagina, che ogni secondo fa questo:
    codice:
    var i=0;
    function getXMLHttp() {
    var xmlhttp = null;
    if (window.ActiveXObject) {
    if (navigator.userAgent.toLowerCase().indexOf("msie 5") != -1) {
    xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    }
    }
    if (!xmlhttp && typeof(XMLHttpRequest) != 'undefined') {
    xmlhttp = new XMLHttpRequest()
    }
    return xmlhttp
    }
    objHTTP = getXMLHttp();
    objHTTP.open("GET", "server.php?azione=aggiorna"+i, true);<--Problema
    objHTTP.onreadystatechange = function() {elaboraRisposta()}
    objHTTP.send(null);
    function elaboraRisposta() {
    if (objHTTP.readyState == 4) {
    	var risposta=objHTTP.responseTEXT;
    	if(risposta!=""){
    		document.getElementById('textarea').innerHTML=risposta;
    	}
    
    i=i+1;
    }
    }
    
    }
    dove ho scritto Problema stava il mio problema che ho risolto x sbaglio sbagliando riga
    inizialmente io inviavo i dati...me li inseriva nel database..ma non me li leggeva...
    invece andava se aprivo in una nuova finestra la pagina "server.php"...
    invece aggiungendo quello stupido aborto di contatore funziona
    perchè??

    inoltre avevo aggiunto una bellissima funzione disconnetti che troncava il timer in modo da fermare l'aggiornamento della chat...
    ma provando ho constatato che non funzionava
    allora mi è sorto il dubbio...ho sbagliato tutto???
    non ho capito nulla di ajax???e del modello asincrono??
    cioè che la richiesta la fai una volta e poi resta li e si aggiorna da sola senza fare timer & co??



    grazie!

    PS.
    questa è la mia prima prova con AJAX-->non prendetevela se ho scritto eresie...o se ho fatto/farò domande stupide

  2. #2
    mmm...pensandoci forse sarebbe stato più indicato postare nella sezione javascript....
    comunque mi sono dimenticato di aggiungere il codice della pagina in php che legge e scrive l'ultimo messaggio nel database...
    Codice PHP:
    <?php
    $host
    ="localhost";
    $username="root";
    $password="";
    $db_name="chat";
    $messaggio="";
    $azione="";
    $messag="";
    $messaggio_old="";
    /*
    if(isset($_GET['azione'])){
        $azione=$_GET['azione'];
        
    }
    */
    $connessionemysql_connect($host,$username,$password)
    or die(
    "Problemi di connessione"); 
    mysql_select_db($db_name,$connessione) or die("no db");



        
    $leggi=mysql_query("SELECT * FROM chat WHERE id='1' ");
        while (
    $valori mysql_fetch_array($leggi)){
            
    $messaggio_old=$valori['messaggio'];
        }
    echo 
    $messaggio_old;

     
    mysql_close($connessione);
    ?>
    prima le pagine per scrivere e leggere dal database eranon una sola... avevo messo delle variabili GET per decidere se leggere o scrivere

    dove ho sbagliato???

    mi è venuta un'idea...
    non è che l'oggetto "getXMLHttp" lo devo creare una sola volta...e poi nei cicli del timer devo solo formulare la richiesta objHTTP.open??

  3. #3
    SIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIII!!!!!!!!!!
    C'è un secondo problema con IE in realtà, fa il caching delle richieste HTTP fatte in questo modo, dunque se sono effettuate utilizzando la stessa URL più volte, anche se lo script PHP richiamato produce diversi risultati, il risultato ottenuto sarà sempre lo stesso. Per evitare questo problema invece di richiedere qualcosa come script.php basta richiedere script.php?rand=numeroCasualie. In questo modo inganniamo IE facendogli credere che ogni volta si tratta di una richiesta diversa ed evitiamo il problema della cache. Per generare un numero casuale in Javascript si utilizza la funzione Math.random, dunque per evitare il problema della cache di IE tutto quello che dovremmo modificare nello script di sopra è la riga in cui la richiesta viene settata utilizzando il metodo open. Nello script originale usavamo:
    myRequest.open("GET","primo.php");

    Mentre sarebbe opportuno utilizzare:
    myRequest.open("GET","primo.php&rand="+escape(Math .random()));
    avevo ragione!!!
    allora SONO RIUSCITO A CREARE UNA CHAT IN AJAX!!!
    YUUU-UUUUUU!!!
    Pirip-Pirip-Pirip


  4. #4
    soluzioni da Flash 5 (anno 1999) ???

    e dire che ne ho scritte almeno un paio di pillole in merito

    http://forum.html.it/forum/showthrea...hreadid=457946
    http://forum.html.it/forum/showthrea...hreadid=897228


    il succo è questo:

    il rand non è necessario, l'escape sul rand anche meno ...

    scrivi questo prima di stampare l'output e fine dei problemi


    header('Content-Length: '.strlen($output));
    header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
    header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
    header('Cache-Control: no-store, no-cache, must-revalidate');
    header('Cache-Control: post-check=0, pre-check=0', false);
    header('Pragma: no-cache');
    echo $output;


    P.S. quando si quota anche sapere la fonte sarebbe interessante
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

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.