el02154 Δημοσ. 31 Αυγούστου 2010 Δημοσ. 31 Αυγούστου 2010 Γεια σας παιδιά, θα ήθελα να ρωτήσω αν γίνεται να βάλω κάποιον preloader στην σελίδα μου μέχρι να ολοκληρωθει και να μου εμφανιστεί το αποτέλεσμα ενός php script που διαρκεί περίπου 1 λεπτό.
routsounmanman Δημοσ. 31 Αυγούστου 2010 Δημοσ. 31 Αυγούστου 2010 Γεια σας παιδιά, θα ήθελα να ρωτήσω αν γίνεται να βάλω κάποιον preloader στην σελίδα μου μέχρι να ολοκληρωθει και να μου εμφανιστεί το αποτέλεσμα ενός php script που διαρκεί περίπου 1 λεπτό. Αν σκέφτεσαι κάτι σε Flash, ξέχνα το, δεν μπορεί να φορτώσει HTML / PHP κώδικα σαν preloader. Θα μπορούσες να χρησιμοποιήσεις AJAX και να βάλεις κάποιο .gif φόρτωσης μέχρι να εμφανιστεί το αποτέλεσμα. Τι ακριβώς όμως κάνεις σε PHP και θέλεις τόσο χρόνο;;;
el02154 Δημοσ. 31 Αυγούστου 2010 Μέλος Δημοσ. 31 Αυγούστου 2010 Αν σκέφτεσαι κάτι σε Flash, ξέχνα το, δεν μπορεί να φορτώσει HTML / PHP κώδικα σαν preloader. Θα μπορούσες να χρησιμοποιήσεις AJAX και να βάλεις κάποιο .gif φόρτωσης μέχρι να εμφανιστεί το αποτέλεσμα. Τι ακριβώς όμως κάνεις σε PHP και θέλεις τόσο χρόνο;;; Κάνω telnet σε κάποιες συσκευές και περιμένω τις απαντήσεις. Ξέρεις πως μπορώ να κάνω αυτό που μου προτείνεις;
dewn735 Δημοσ. 31 Αυγούστου 2010 Δημοσ. 31 Αυγούστου 2010 Κάτι τέτοιο ίσως; ><body> <div class='loading' id='load'><strong>Now loading...</strong></div> <!-- Εδώ βάζεις τον php κώδικα--> <script type="text/javascript">document.getElementById('load').style.display = "";</script> </body> και css: >.loading { display: block; width:150px; height:150px; bottom:45%; left:45%; text-align: center; border: 2px solid orange; position:absolute; background: yellow url('images/loading.png') no-repeat; background-position: 10px center; z-index:2; }
routsounmanman Δημοσ. 31 Αυγούστου 2010 Δημοσ. 31 Αυγούστου 2010 Javascript στο head: > <script language='javascript'> function getXMLHTTPRequest(){ var req=false; try{ req= new XMLHttpRequest(); }catch(err){ try{ req=new ActiveXObject('Msxm12.XMLHTTP'); }catch(err){ try{ req=new ActiveXObject('Microsoft.XMLHTTP'); }catch(err){ req=false; } } } return req; } function doUpdate(){ if(myReq.readyState==4){ if(myReq.status==200){ document.getElementById('echo').innerHTML=myReq.responseText; } }else{ document.getElementById('echo').innerHTML=\"<div align='center'><img src='images/ajax-loader.gif'></img></div>\"; } } </script> Στην HTML : > ... <div id='echo'>Loading...</div> ... Και στο PHP script-άκι όταν σου απαντήσουν όλες οι συσκευές, καλείς την doUpdate()
el02154 Δημοσ. 1 Σεπτεμβρίου 2010 Μέλος Δημοσ. 1 Σεπτεμβρίου 2010 Παιδια ευχαριστώ για τις απαντήσεις. Θα τα δοκιμάσω και θα σας πω τα αποτελέσματα. ---------- Προσθήκη στις 09:19 ---------- Προηγούμενο μήνυμα στις 08:56 ---------- Javascript στο head: > <script language='javascript'> function getXMLHTTPRequest(){ var req=false; try{ req= new XMLHttpRequest(); }catch(err){ try{ req=new ActiveXObject('Msxm12.XMLHTTP'); }catch(err){ try{ req=new ActiveXObject('Microsoft.XMLHTTP'); }catch(err){ req=false; } } } return req; } function doUpdate(){ if(myReq.readyState==4){ if(myReq.status==200){ document.getElementById('echo').innerHTML=myReq.responseText; } }else{ document.getElementById('echo').innerHTML=\"<div align='center'><img src='images/ajax-loader.gif'></img></div>\"; } } </script> Στην HTML : > ... <div id='echo'>Loading...</div> ... Και στο PHP script-άκι όταν σου απαντήσουν όλες οι συσκευές, καλείς την doUpdate() Για κάποιο λόγο αυτό δεν μου δουλεύει. Δηλαδή πάλι μου εμφανίζεται η σελίδα μισή περιμένοντας να ολοκληρωθεί το php script. Παίζει να έχω κάνει και καμιά βλακεία. Επίσης το loading δεν μου εξαφανίζεται ποτέ. Μην πυροβολήσεις αν έχω κάνει καμιά βλακεία...
dewn735 Δημοσ. 1 Σεπτεμβρίου 2010 Δημοσ. 1 Σεπτεμβρίου 2010 Άμα περιμένεις να απαντήσουν όλες οι συσκευές για να καλέσεις τη συνάρτηση, το έχεις χάσει πάλι το παιχνίδι... Κατά τη γνώμη μου, θα πρέπει να βάλεις τις ρουτίνες που μιλάνε με τις συσκευές σε άλλο αρχείο, πχ: results.php, οπότε και το παραπάνω παράδειγμα γίνεται κάπως έτσι (με τρελό copy-paste / Δεν έχω τσεκάρει αν δουλεύει σωστά): > <head> <script type="text/javascript"> function showprogress() { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("echo").innerHTML="Loading complete"; } } xmlhttp.open("GET","results.php",true); xmlhttp.send(); }</script></head> <body> <div id='echo'>Loading...</div> <script type="text/javascript">showprogress();</script> </body>
CyberCr33p Δημοσ. 1 Σεπτεμβρίου 2010 Δημοσ. 1 Σεπτεμβρίου 2010 Πιστεύω ότι θα ήταν καλύτερο να τρέχεις ένα php script μέσω cron όπου θα περνούσε τα αποτελέσματα σε μια βάση δεδομένων ή σε ένα txt αρχείο. Αυτό θα έτρεχε κάνε 5 λεπτά (ή όσο θέλεις). Στη συνέχεια μέσα από το site απλά εμφανίζεις τα αποτελέσματα του txt ή από τη βάση. Με αυτό το τρόπο ο επισκέπτης θα παίρνει άμεσα τα αποτελέσματα.
el02154 Δημοσ. 1 Σεπτεμβρίου 2010 Μέλος Δημοσ. 1 Σεπτεμβρίου 2010 Άμα περιμένεις να απαντήσουν όλες οι συσκευές για να καλέσεις τη συνάρτηση, το έχεις χάσει πάλι το παιχνίδι... Κατά τη γνώμη μου, θα πρέπει να βάλεις τις ρουτίνες που μιλάνε με τις συσκευές σε άλλο αρχείο, πχ: results.php, οπότε και το παραπάνω παράδειγμα γίνεται κάπως έτσι (με τρελό copy-paste / Δεν έχω τσεκάρει αν δουλεύει σωστά): > <head> <script type="text/javascript"> function showprogress() { if (window.XMLHttpRequest) {// code for IE7+, Firefox, Chrome, Opera, Safari xmlhttp=new XMLHttpRequest(); } else {// code for IE6, IE5 xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); } xmlhttp.onreadystatechange=function() { if (xmlhttp.readyState==4 && xmlhttp.status==200) { document.getElementById("echo").innerHTML="Loading complete"; } } xmlhttp.open("GET","results.php",true); xmlhttp.send(); }</script></head> <body> <div id='echo'>Loading...</div> <script type="text/javascript">showprogress();</script> </body> την ρουτίνα με το telnet τα έχω σε ένα διαφορετικό αρχείο php και αυτό το κάνω include στην σελίδα που θέλω. ---------- Προσθήκη στις 16:08 ---------- Προηγούμενο μήνυμα στις 15:54 ---------- Πιστεύω ότι θα ήταν καλύτερο να τρέχεις ένα php script μέσω cron όπου θα περνούσε τα αποτελέσματα σε μια βάση δεδομένων ή σε ένα txt αρχείο. Αυτό θα έτρεχε κάνε 5 λεπτά (ή όσο θέλεις). Στη συνέχεια μέσα από το site απλά εμφανίζεις τα αποτελέσματα του txt ή από τη βάση. Με αυτό το τρόπο ο επισκέπτης θα παίρνει άμεσα τα αποτελέσματα. επειδή είμαι άσχετος και το cron το μόνο που μου θυμίζει είναι ο scheduler του λίνουξ και επειδή εγώ τρέχω windows μου το εξηγείς λίγο αυτό που μου πρότεινες;ΑΝ δεν σου ειναι κόπος βέβαια.
dewn735 Δημοσ. 1 Σεπτεμβρίου 2010 Δημοσ. 1 Σεπτεμβρίου 2010 την ρουτίνα με το telnet τα έχω σε ένα διαφορετικό αρχείο php και αυτό το κάνω include στην σελίδα που θέλω. Το include σημαίνει ότι πρώτα θα τελειώσει ό,τι έχει η σελίδα την οποία κάνεις include και μετά θα συνεχίσει και θα σου εμφανίσει τα υπόλοιπα. Με τον τρόπο που σου προτείνουμε, το ένα φορτώνει ανεξάρτητα από το άλλο (AJAX -> Asynchronous JavaScript and XML). Η σελίδα σου θα φορτώσει πρώτη και, μόλις ολοκληρωθεί και η δεύτερη σελίδα (if (xmlhttp.readyState==4 && xmlhttp.status==200) ) θα σου εμφανίσει το μήνυμα που θες επειδή είμαι άσχετος και το cron το μόνο που μου θυμίζει είναι ο scheduler του λίνουξ και επειδή εγώ τρέχω windows μου το εξηγείς λίγο αυτό που μου πρότεινες;ΑΝ δεν σου ειναι κόπος βέβαια. Αντί να τρέχεις το script αυτό κάθε φορά που το ζητάει ο χρήστης, το τρέχεις εσύ από μόνοw σου (είτε σαν cron είτε σαν scheduled task) και στον χρήστη εμφανίζεις τα αποτελέσματα της τελευταίας εκτέλεσης
el02154 Δημοσ. 2 Σεπτεμβρίου 2010 Μέλος Δημοσ. 2 Σεπτεμβρίου 2010 Το include σημαίνει ότι πρώτα θα τελειώσει ό,τι έχει η σελίδα την οποία κάνεις include και μετά θα συνεχίσει και θα σου εμφανίσει τα υπόλοιπα. Με τον τρόπο που σου προτείνουμε, το ένα φορτώνει ανεξάρτητα από το άλλο (AJAX -> Asynchronous JavaScript and XML). Η σελίδα σου θα φορτώσει πρώτη και, μόλις ολοκληρωθεί και η δεύτερη σελίδα (if (xmlhttp.readyState==4 && xmlhttp.status==200)) θα σου εμφανίσει το μήνυμα που θες Αντί να τρέχεις το script αυτό κάθε φορά που το ζητάει ο χρήστης, το τρέχεις εσύ από μόνοw σου (είτε σαν cron είτε σαν scheduled task) και στον χρήστη εμφανίζεις τα αποτελέσματα της τελευταίας εκτέλεσης A αυτό που δεν είχα μάλλον καταλάβει είναι πως ουσιαστικά θα έχω 2 διαφορετικές σελίδες; Μία που θα έχω το preloader και μία άλλη που θα περιέχει και το php script? Σε ποια από τις δύο θα έχω το javascript? Σορρυ που ρωτάω αλλα έχω πελαγωσει με αυτό το πράγμα...
dewn735 Δημοσ. 2 Σεπτεμβρίου 2010 Δημοσ. 2 Σεπτεμβρίου 2010 Αρχικά αποφάσισε τι ακριβώς θα κάνεις τελικά. Σου έχουμε προτείνει τρεις διαφορετικές λύσεις και μάλλον έχεις μπλεχτεί με αυτές. Στις υπενθυμίζω, για να βγάλεις μια άκρη: 1) Εμφανίζεις μια εικόνα φορτώματος, κάνεις Include το δεύτερο αρχείο και μόλις αυτό τελειώσει τρέχεις μια απλή συνάρτηση javascript και "εξαφανίζεις" την εικόνα. Απλό και γρήγορο, όμως θα πρέπει να περιμένεις να ολοκληρωθούν τα telnet που λες για να εμφανίζεις οτιδήποτε άλλο 2) Παίζεις με ajax, φορτώνεις τη πρώτη σελίδα η οποία φορτώνει τη δεύτερη σελίδα και συνεχίζουν και οι δυο μαζί παράλληλα. Πιο δύσκολο στην υλοποίηση, πιο φιλικό ως προς τον χρήστη 3) Κάνεις τα telnet από μόνος σου (και όχι κάθε φορά που το ζητάει ο χρήστης) και αποθηκεύεις τα αποτελέσματα αυτών. Όταν κάποιος στο ζητήσει, δε κάνεις εκ νέου τα telnet παρά του δείχνεις τα αποτελέσματα από το τελευταίο τρέξιμο. Αν δεν είναι απαραίτητο να παίρνει τα αποτελέσματα σε πραγματικό χρόνο, είναι η πιο σωστή επιλογή Διάλεξε και πες μας!
el02154 Δημοσ. 3 Σεπτεμβρίου 2010 Μέλος Δημοσ. 3 Σεπτεμβρίου 2010 Αρχικά αποφάσισε τι ακριβώς θα κάνεις τελικά. Σου έχουμε προτείνει τρεις διαφορετικές λύσεις και μάλλον έχεις μπλεχτεί με αυτές. Στις υπενθυμίζω, για να βγάλεις μια άκρη:1) Εμφανίζεις μια εικόνα φορτώματος, κάνεις Include το δεύτερο αρχείο και μόλις αυτό τελειώσει τρέχεις μια απλή συνάρτηση javascript και "εξαφανίζεις" την εικόνα. Απλό και γρήγορο, όμως θα πρέπει να περιμένεις να ολοκληρωθούν τα telnet που λες για να εμφανίζεις οτιδήποτε άλλο 2) Παίζεις με ajax, φορτώνεις τη πρώτη σελίδα η οποία φορτώνει τη δεύτερη σελίδα και συνεχίζουν και οι δυο μαζί παράλληλα. Πιο δύσκολο στην υλοποίηση, πιο φιλικό ως προς τον χρήστη 3) Κάνεις τα telnet από μόνος σου (και όχι κάθε φορά που το ζητάει ο χρήστης) και αποθηκεύεις τα αποτελέσματα αυτών. Όταν κάποιος στο ζητήσει, δε κάνεις εκ νέου τα telnet παρά του δείχνεις τα αποτελέσματα από το τελευταίο τρέξιμο. Αν δεν είναι απαραίτητο να παίρνει τα αποτελέσματα σε πραγματικό χρόνο, είναι η πιο σωστή επιλογή Διάλεξε και πες μας! Παιδιά ευχαριστώ καταρχήν. Διάλεξα την τρίτη λύση και παίζει μια χαρά. Το μόνο που δεν έχω καταφέρει να δουλέψει είναι το php script να τρέχει αυτόματα κάθε 5 λεπτά...
CyberCr33p Δημοσ. 3 Σεπτεμβρίου 2010 Δημοσ. 3 Σεπτεμβρίου 2010 Σε Linux αυτό γίνεται μέσω του Cron. Σε Windows σίγουρα θα υπάρχει αντίστοιχος τρόπος να γίνεται.
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.