Oppure

Loading
03/02/15 11:08
EngRing
Buongiorno a tutti. Ho un problema che non riesco a risolvere. Il tema in questione è ajax. Provo a spiegarmi.
Sto realizzando un giochino che permette a due utenti con ip diverso di sfidarsi. Quindi uno crea la partita e resta in attesa che l'altro accetti. Questa parte devo farla con ajax con il seguente ragionamento. Quando viene creata la partita, viene inserita una tupla nel database con i dati relativi alla stessa compreso un campo "Inizio" di tipo booleano. Ora quello che mi serve è andare a verificare ogni tot secondi se il contenuto di questo campo è passato da false a true (ossia se la partita è stata accettata) per poi reindirizzare il creatore della partita nel "campo di gioco".
Riassumendo il problema devo eseguire un .php contenente la query di verifica ogni tot secondi permettendo comunque il caricamento della pagina.
Ecco il codice che a me non funziona:

ajax.js
function listenResp() {
    alert(this.responseText);
}

function esempio3(){
    var oReq = new XMLHttpRequest();
    oReq.onload = listenResp;
    oReq.open("POST", "prova.php", true);
    oReq.send(null);
}


prova.php: che dovrà contenere la query di verifica "Select Inizio From Partita Where ....."
<?php
    echo "ASSO!!!!";
?>


crea_partita.html: ho copiato solo la riga che interessa la funzione di richiamo
<body onLoad="setInterval(esempio3(), 3000);">


In teoria dovrebbe essere visualizzato a video ogni 3 secondi la stringa "ASSO!!!", ma questo non succede :(
Potete dirmi qualcosa? Dove sbaglio?
Ultima modifica effettuata da EngRing 03/02/15 11:10
aaa
03/02/15 14:39
EngRing
Sono riuscito a risolvere, grazie comunque. Eventualmente posto il codice corretto dovesse servire a qualcuno in futuro.
aaa
03/02/15 14:46
Roby94
Hai una pagina demo a cuoi possiamo far riferimento per lo javascript?
Vorrei consigliarti l'uso del framework jQuery, se il tuo sito si basa molto su Javascript risulta quasi indispensabile averlo, inoltre se non hai molta dimestichezza con le tecniche ajax, questo frameowrk predispone delle funzioni molto complete per questo tipo di interazioni.

<body onLoad="setInterval(esempio3(), 3000);"> 

esempio3 va trattato come delegato, quindi è sbagliato scrivere esempio3() con le due parentesi, ti basta eliminarle o sostituire il tutto con

<body onLoad="setInterval(function(){esempio3();}, 3000);"> 
aaa
03/02/15 18:09
EngRing
Si era esattamente quello il problema!:k:
Ora però ho riscontrato una imperfezione. Ad ogni iterazione viene aperta una finestra, tipo window.alert() vuota, che blocca il tutto. Poi cliccando su ok fa un'altra iterazione e poi si blocca nuovamente. Come posso risolvere? Grazie per la risposta comunque :)
aaa
03/02/15 19:08
Roby94
Mi permetto di commentare
Postato originariamente da EngRing:
ajax.js
function listenResp() {
    alert(this.responseText);//Mostra un alert con messaggio this.resposeText(Esiste questa variabile? non mi sembra)
}

function esempio3(){
    var oReq = new XMLHttpRequest();//Creo il nuovo oggetto per la gestione della richiesta http
    oReq.onload = listenResp;//Associo all'evento onload la funzione listenResp
    oReq.open("POST", "prova.php", true);//Imposto il tipo di richiesta POST e riferita alla pagina "prova.php", il terzo parametro non me lo ricordo XD
    oReq.send(null);//Non allego alcuna informazione alla richiesta POSTe la invio
}

Ora dovrebbe essere chiaro perché si palesa questa finestra.
Ribadisco il passa a jQuery XD
aaa
03/02/15 20:19
netarrow
Per il tipo di progetto che hai descritto voler implementare ti consiglio di dare un'occhiata alle WebSockets.
Ti permetterebbe di gestire le comunicazione fra server e clients in full-duplex, e quindi poter notificare in modalità push i clients direttamente dal server senza dover ogni tot eseguire la richiesta ajax da ogni client.

Anche se alla fine hai risolto credo ti possa interessare.
aaa
03/02/15 21:35
EngRing
Scusa il disturbo ma togliendo quell'istruzione non viene più eseguito prova.php :asd:
aaa
03/02/15 21:57
Roby94
Ottima idea quella di adoperare i websocket, una potente feature introdotta con HTML5, purtroppo le ho trattate poco ma credo che non avrai problema a trovare supporto su questo forum per questo argomento.

Quello che ti posso dire io è rivediti bene le interazioni Ajax
html.it/guide/guida-ajax/
Fai confusione sulle varie istruzioni anche dopo che te le ho commentate, devi capire bene cosa fa ogni riga di codice e trovare la giusta implementazione della tua applicazione. Se non capisci il metodo di utilizzo ripiega su librerie gia fatte.
aaa