Ciao a tutti,
sto tentando di capirci qualcosa di più riguardo Ajax...
Ho letto un pò in giro, e ho creato prendendo spunto un pò qua e un pò là, una piccola pagina con un input box nel quale si possono scrivere tutte le parole tranne "ciao" e "mamma". Se si scrive 'ciao' o 'mamma' viene visualizzato: Hai scritto 'ciao' o 'mamma'; altrimenti viene visualizzato: Ottimo, nessun errore...
Ovviamente il controllo deve essere affidato ad una richiesta XML su un file php.
Ecco il listato della pagina con l'input box:
Ed ecco il listato della pagina PHP 'motore':codice:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Prova Ajax</title> <script type="text/javascript"> var req; var flag; function loadXMLDoc(url) { if (window.XMLHttpRequest) { req = new XMLHttpRequest(); req.onreadystatechange = processReqChange; req.open("GET", url, true); req.send(null); } else if (window.ActiveXObject) { req = new ActiveXObject("Microsoft.XMLHTTP"); if (req) { req.onreadystatechange = processReqChange; req.open("GET", url, true); req.send(); } } } function processReqChange() { if (req.readyState == 4) { if (req.status == 200) { response = req.responseXML.documentElement; result = response.getElementsByTagName('result')[0].firstChild.data; //se il risultato della query sul file php è 1, setto il flag di errore a 1...altrimenti lo setto a zero if(result == 1) flag = 1; else flag = 0; } else { alert("Problema a reperire i dati XML:\n" + req.statusText); } } } function checkName(input) { var messageFail = document.getElementById('nameCheckFailed'); var messageOk = document.getElementById('nameCheckOk'); var url = 'http://localhost/ajax/prova.php?q=' + input; //richiamo il calcolo dei dati XML loadXMLDoc(url); if(flag) { messageFail.style.display = 'inline'; messageOk.style.display = 'none'; } else { messageFail.style.display = 'none'; messageOk.style.display = 'inline'; } } </script> </head> <body> <input id="username" name="username" type="text" onkeyup="checkName(this.value)"> <span id="nameCheckFailed" style="display:none;">Hai scritto 'ciao' o 'mamma' </span> <span id="nameCheckOk" style="display:inline;">Ottimo, nessun errore... </span> </body> </html>
Ora...il problema è semplice da spiegare...codice:<?php header('Content-Type: text/xml'); function nameInUse($q) { if (isset($q)){ switch(strtolower($q)) { case 'ciao' : return '1'; break; case 'mamma' : return '1'; break; default: return '0'; } }else{ return '0'; } } ?> <?php echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; ?> <response> <method>checkName</method> <result><?php echo nameInUse($_GET['q']) ?></result> </response>
Se per esempio voglio scrivere 'ciao' per vedere se mi viene visualizzato l'errore...scrivo c,i,a,o e mi visualizza Ottimo, nessun errore.... Poi aggiungo una lettera qualsiasi, e allora l'errore Hai scritto 'ciao' o 'mamma' viene visualizzato.
Poi, se si cancella solo questa lettera aggiuntiva, lasciando scritto 'ciao', mi ritorna il messaggio Ottimo, nessun errore....
Cancellando anche la 'o' di 'ciao', lasciando solo 'cia', mi ritorna Hai scritto 'ciao' o 'mamma'.
A cosa è dovuto questo fatto?? Con l'evento onkeyup la pagina dovrebbe ricaricare la richiesta XML ad ogni pressione e rilascio di un tasto sulla tastiera...e quindi dovrebbe funzionare...
Dove sto sbagliando??![]()
Scusatemi in anticipo se è un problema banale o stupido ma sono proprio alle prime armi di questa "nuova" tecnica![]()

Rispondi quotando