Προς το περιεχόμενο

Preloader σε PHP script


el02154

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας παιδιά,

 

θα ήθελα να ρωτήσω αν γίνεται να βάλω κάποιον preloader στην σελίδα μου μέχρι να ολοκληρωθει και να μου εμφανιστεί το αποτέλεσμα ενός php script που διαρκεί περίπου 1 λεπτό.

Δημοσ.
Γεια σας παιδιά,

 

θα ήθελα να ρωτήσω αν γίνεται να βάλω κάποιον preloader στην σελίδα μου μέχρι να ολοκληρωθει και να μου εμφανιστεί το αποτέλεσμα ενός php script που διαρκεί περίπου 1 λεπτό.

 

Αν σκέφτεσαι κάτι σε Flash, ξέχνα το, δεν μπορεί να φορτώσει HTML / PHP κώδικα σαν preloader.

 

Θα μπορούσες να χρησιμοποιήσεις AJAX και να βάλεις κάποιο .gif φόρτωσης μέχρι να εμφανιστεί το αποτέλεσμα.

 

Τι ακριβώς όμως κάνεις σε PHP και θέλεις τόσο χρόνο;;; :rolleyes:

Δημοσ.
Αν σκέφτεσαι κάτι σε Flash, ξέχνα το, δεν μπορεί να φορτώσει HTML / PHP κώδικα σαν preloader.

 

Θα μπορούσες να χρησιμοποιήσεις AJAX και να βάλεις κάποιο .gif φόρτωσης μέχρι να εμφανιστεί το αποτέλεσμα.

 

Τι ακριβώς όμως κάνεις σε PHP και θέλεις τόσο χρόνο;;; :rolleyes:

 

Κάνω telnet σε κάποιες συσκευές και περιμένω τις απαντήσεις. Ξέρεις πως μπορώ να κάνω αυτό που μου προτείνεις;

Δημοσ.

Κάτι τέτοιο ίσως;

><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;
}

Δημοσ.

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() :-D

Δημοσ.

Παιδια ευχαριστώ για τις απαντήσεις. Θα τα δοκιμάσω και θα σας πω τα αποτελέσματα.

 

---------- Προσθήκη στις 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() :-D

 

Για κάποιο λόγο αυτό δεν μου δουλεύει. Δηλαδή πάλι μου εμφανίζεται η σελίδα μισή περιμένοντας να ολοκληρωθεί το php script. Παίζει να έχω κάνει και καμιά βλακεία. Επίσης το loading δεν μου εξαφανίζεται ποτέ. Μην πυροβολήσεις αν έχω κάνει καμιά βλακεία...:-)

Δημοσ.

Άμα περιμένεις να απαντήσουν όλες οι συσκευές για να καλέσεις τη συνάρτηση, το έχεις χάσει πάλι το παιχνίδι...

 

Κατά τη γνώμη μου, θα πρέπει να βάλεις τις ρουτίνες που μιλάνε με τις συσκευές σε άλλο αρχείο, πχ: 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>

Δημοσ.

Πιστεύω ότι θα ήταν καλύτερο να τρέχεις ένα php script μέσω cron όπου θα περνούσε τα αποτελέσματα σε μια βάση δεδομένων ή σε ένα txt αρχείο. Αυτό θα έτρεχε κάνε 5 λεπτά (ή όσο θέλεις).

 

Στη συνέχεια μέσα από το site απλά εμφανίζεις τα αποτελέσματα του txt ή από τη βάση.

 

Με αυτό το τρόπο ο επισκέπτης θα παίρνει άμεσα τα αποτελέσματα.

Δημοσ.
Άμα περιμένεις να απαντήσουν όλες οι συσκευές για να καλέσεις τη συνάρτηση, το έχεις χάσει πάλι το παιχνίδι...

 

Κατά τη γνώμη μου, θα πρέπει να βάλεις τις ρουτίνες που μιλάνε με τις συσκευές σε άλλο αρχείο, πχ: 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 μου το εξηγείς λίγο αυτό που μου πρότεινες;ΑΝ δεν σου ειναι κόπος βέβαια.

Δημοσ.
την ρουτίνα με το 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) και στον χρήστη εμφανίζεις τα αποτελέσματα της τελευταίας εκτέλεσης

Δημοσ.
Το 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? Σορρυ που ρωτάω αλλα έχω πελαγωσει με αυτό το πράγμα...

Δημοσ.

Αρχικά αποφάσισε τι ακριβώς θα κάνεις τελικά. Σου έχουμε προτείνει τρεις διαφορετικές λύσεις και μάλλον έχεις μπλεχτεί με αυτές. Στις υπενθυμίζω, για να βγάλεις μια άκρη:

1) Εμφανίζεις μια εικόνα φορτώματος, κάνεις Include το δεύτερο αρχείο και μόλις αυτό τελειώσει τρέχεις μια απλή συνάρτηση javascript και "εξαφανίζεις" την εικόνα. Απλό και γρήγορο, όμως θα πρέπει να περιμένεις να ολοκληρωθούν τα telnet που λες για να εμφανίζεις οτιδήποτε άλλο

2) Παίζεις με ajax, φορτώνεις τη πρώτη σελίδα η οποία φορτώνει τη δεύτερη σελίδα και συνεχίζουν και οι δυο μαζί παράλληλα. Πιο δύσκολο στην υλοποίηση, πιο φιλικό ως προς τον χρήστη

3) Κάνεις τα telnet από μόνος σου (και όχι κάθε φορά που το ζητάει ο χρήστης) και αποθηκεύεις τα αποτελέσματα αυτών. Όταν κάποιος στο ζητήσει, δε κάνεις εκ νέου τα telnet παρά του δείχνεις τα αποτελέσματα από το τελευταίο τρέξιμο. Αν δεν είναι απαραίτητο να παίρνει τα αποτελέσματα σε πραγματικό χρόνο, είναι η πιο σωστή επιλογή

 

Διάλεξε και πες μας!

Δημοσ.
Αρχικά αποφάσισε τι ακριβώς θα κάνεις τελικά. Σου έχουμε προτείνει τρεις διαφορετικές λύσεις και μάλλον έχεις μπλεχτεί με αυτές. Στις υπενθυμίζω, για να βγάλεις μια άκρη:

1) Εμφανίζεις μια εικόνα φορτώματος, κάνεις Include το δεύτερο αρχείο και μόλις αυτό τελειώσει τρέχεις μια απλή συνάρτηση javascript και "εξαφανίζεις" την εικόνα. Απλό και γρήγορο, όμως θα πρέπει να περιμένεις να ολοκληρωθούν τα telnet που λες για να εμφανίζεις οτιδήποτε άλλο

2) Παίζεις με ajax, φορτώνεις τη πρώτη σελίδα η οποία φορτώνει τη δεύτερη σελίδα και συνεχίζουν και οι δυο μαζί παράλληλα. Πιο δύσκολο στην υλοποίηση, πιο φιλικό ως προς τον χρήστη

3) Κάνεις τα telnet από μόνος σου (και όχι κάθε φορά που το ζητάει ο χρήστης) και αποθηκεύεις τα αποτελέσματα αυτών. Όταν κάποιος στο ζητήσει, δε κάνεις εκ νέου τα telnet παρά του δείχνεις τα αποτελέσματα από το τελευταίο τρέξιμο. Αν δεν είναι απαραίτητο να παίρνει τα αποτελέσματα σε πραγματικό χρόνο, είναι η πιο σωστή επιλογή

 

Διάλεξε και πες μας!

 

 

Παιδιά ευχαριστώ καταρχήν. Διάλεξα την τρίτη λύση και παίζει μια χαρά. Το μόνο που δεν έχω καταφέρει να δουλέψει είναι το php script να τρέχει αυτόματα κάθε 5 λεπτά...

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...