Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Javascript - Ajax query sql ogni tot secondi
Forum - Javascript - Ajax query sql ogni tot secondi

Avatar
EngRing (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/02/2015

Segnala al moderatore
Postato alle 12:08
Martedì, 03/02/2015
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
Codice sorgente - presumibilmente Php

  1. function listenResp() {
  2.     alert(this.responseText);
  3. }
  4.  
  5. function esempio3(){
  6.     var oReq = new XMLHttpRequest();
  7.     oReq.onload = listenResp;
  8.     oReq.open("POST", "prova.php", true);
  9.     oReq.send(null);
  10. }



prova.php: che dovrà contenere la query di verifica "Select Inizio From Partita Where ....."
Codice sorgente - presumibilmente Plain Text

  1. <?php
  2.     echo "ASSO!!!!";
  3. ?>



crea_partita.html: ho copiato solo la riga che interessa la funzione di richiamo
Codice sorgente - presumibilmente Javascript

  1. <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 il 03/02/2015 alle 12:10
PM Quote
Avatar
EngRing (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/02/2015

Segnala al moderatore
Postato alle 15:39
Martedì, 03/02/2015
Sono riuscito a risolvere, grazie comunque. Eventualmente posto il codice corretto dovesse servire a qualcuno in futuro.

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 15:46
Martedì, 03/02/2015
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.

Codice sorgente - presumibilmente Javascript

  1. <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

Codice sorgente - presumibilmente Javascript

  1. <body onLoad="setInterval(function(){esempio3();}, 3000);">


PM Quote
Avatar
EngRing (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/02/2015

Segnala al moderatore
Postato alle 19:09
Martedì, 03/02/2015
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 :)

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 20:08
Martedì, 03/02/2015
Mi permetto di commentare
Testo quotato

Postato originariamente da EngRing:
ajax.js
Codice sorgente - presumibilmente Php

  1. function listenResp() {
  2.     alert(this.responseText);//Mostra un alert con messaggio this.resposeText(Esiste questa variabile? non mi sembra)
  3. }
  4.  
  5. function esempio3(){
  6.     var oReq = new XMLHttpRequest();//Creo il nuovo oggetto per la gestione della richiesta http
  7.     oReq.onload = listenResp;//Associo all'evento onload la funzione listenResp
  8.     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
  9.     oReq.send(null);//Non allego alcuna informazione alla richiesta POSTe la invio
  10. }



Ora dovrebbe essere chiaro perché si palesa questa finestra.
Ribadisco il passa a jQuery XD

PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 21:19
Martedì, 03/02/2015
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.

PM Quote
Avatar
EngRing (Normal User)
Newbie


Messaggi: 4
Iscritto: 03/02/2015

Segnala al moderatore
Postato alle 22:35
Martedì, 03/02/2015
Scusa il disturbo ma togliendo quell'istruzione non viene più eseguito prova.php :asd:

PM Quote
Avatar
Roby94 (Member)
Guru


Messaggi: 1170
Iscritto: 28/12/2009

Segnala al moderatore
Postato alle 22:57
Martedì, 03/02/2015
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
http://www.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.

PM Quote