salve
muoviamo un po i primi passi verso questo nuovo modo di fare web... AIAX ho preso spunto da un utilissimo articolo
e sono riuscito a fare un po di cose...
questo è il codice javascript
<script language="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(action) {
http.open('get', 'controllo_nick.php?action='+action);
http.onreadystatechange = handleResponse;
http.send(null);
}
function handleResponse() {
if(http.readyState == 4){
var response = http.responseText;
alert(response);
}
}
</script>
questo è il codice php
<?
include("../include/connessione_database.php");
$valore = $_REQUEST['action'];
$query_username = mysql_query("SELECT id FROM utenti WHERE username = '$valore'");
if(list($id_utente) = mysql_fetch_row($query_username))
print("esiste");
else
print("non esiste");
?>
e questo è il semplice codice html
<form name="form">
<input type="text" name="username">
<input type="button" onClick="javascript:sndReq(document.form.username. value)" value="controlla">
</form>
il tutto funziona alla perfezione infatti se l'utente esiste allora l'alert stamperà esiste altrimenti stamperà non esiste
noi chiamiamo la funzione sendReq che a sua volta chiama una pagina php che fa dei print; questi print vengono intercettati dalla funzione handeleResponse e possono essere utilizzati
ad esempio io passo un valore di un username a sndReq questa controlla lato server se sul database quel'utente esiste e poi mi stampa un alert
il problema che ora mi pongo è questo
in realtà la funzione handleRepsponse nn viene mai chiamata, quindi nn possiamo mettere un return... e di conseguenza nn possiamo nemmeno fare qualcosa del tipo
var = sndRep(qualcosa) xkè in realtà nemmeno sndRep ha un return
fai una chiamata http tramite js, lui fa la chiamata e delega la gestione della risposta ad un'altra funzione.. delegata la gestione della risposta esce.
Quando la chiamata http è finita, js richiama la funzione che avevi associato alla gestione della risposta.
Questo è un paradigma di programmazione che si chiama appunto “Inversion of Control”, non è piu l’applicazione principale che mantienila logica di business (logica applicativa) ma la funzione delegata.
non hai modo ovviamente di ricevere nulla da handleResponse perché tu non l’hai mai chiamata!! (Che paradosso!)
c'è qualche altro modo per ottenere risultati da questa funzione?
GRAZIE