Attesa mentre carica pagina

lorenzo84

Utente Attivo
22 Lug 2012
239
0
16
Salve, l'invio di una newsletter avviene al momento in cui si preme su un linguaggio. Questo Link punta a una pagina che invia mail e reindirizza a se stessa fino alla fine quando tramite un header va alla pagina index. A video non viene mostrato niente se non il puntatore che carica. È possibile inserire qualcosa che faccia capire all'utente che la pagina sta lavorando?
 
Codice:
$(function() {

       // Numero di volte che deve eseguire il file
       var newst = 10;

	$("#loader").show();
	foreach(newsc = 0; newsc < newst; newsc++) {
		$.ajax({
			type: "GET",
			url: "newsletter.php?pointer=" + newsp,
			data: "",
                        success: function(response) { newsp = response; }
		});
	}
	$("#loader").hide();

});

Togli la funzione che va a richiamare se stesso e fai lavorare jQuery ed Ajax.
Nello script php ricevi newsp che è il puntatore che conta a che numero sei arrivato nell'invio.

come output dello script metti un "echo $newsp" dove $newsp è il prossimo numero da raggiungere.
 
Codice:
$(function() {

       // Numero di volte che deve eseguire il file
       var newst = 10;

	$("#loader").show();
	foreach(newsc = 0; newsc < newst; newsc++) {
		$.ajax({
			type: "GET",
			url: "newsletter.php?pointer=" + newsp,
			data: "",
                        success: function(response) { newsp = response; }
		});
	}
	$("#loader").hide();

});

Togli la funzione che va a richiamare se stesso e fai lavorare jQuery ed Ajax.
Nello script php ricevi newsp che è il puntatore che conta a che numero sei arrivato nell'invio.

come output dello script metti un "echo $newsp" dove $newsp è il prossimo numero da raggiungere.

Grazie per la risposta..
Domani provo... Ma posso tenere traccia anche di altre variabili o solo il numero di dove è arrivato?
 
di per se funziona ma ho un problema con la variabile newsp.
lui dice che non è inizializzata e se io metto fuori dal ciclo: var newsp=0; lui non incrementa mai il newsp ma invia solo le prime tre.

aiuto....
 
passami il codice PHP e quello Javascript.

Possibilmente usa pastebin.com così evitiamo di infestare di codice il topic.
 
il codice della pagina che riceve è questo:

Codice:
$progressione=$_GET['progressione']; //numero di invii effettuati partendo da zero
        $nnews=3;
        $numutentimax=3;
        $utentitot=9;
        //Estrazione dati newsletter
                $querynews="select * from t6935_newsletter_inviate where id=".$nnews."";
                $risultatonews=mysql_query($querynews);
                $rownews = mysql_fetch_assoc($risultatonews);
                $titolonews=$rownews['titolo'];
                $testonews=$rownews['testo'];  
        //Fine estrazione dati newsletter
       
        //estrazione utenti
        $queryutenti="select * from t6745_newsletter_utenti where stato=1 and attivata=1 order by id desc limit                         $progressione,$numutentimax";
        $risultatoutenti=mysql_query($queryutenti);
        $numrighe=mysql_num_rows($risultatoutenti);
        $i=0;
        while ($row = mysql_fetch_assoc($risultatoutenti))
        {      
                $progressione++;
                $b=date('d M y - H:i:s');
                $var=fopen("controllomail.txt","a");
                fwrite($var, " ".$row["mail"]."num  ".$progressione."\n");
                fclose($var);
        }
       
        if($progressione==$utentitot)
        {
                Fine ciclo perchè utenti è Uguale a progressivo
                echo $progressione;
        }
        else
        {      
                echo $progressione;
        }
Il jquery è:

Codice:
// Numero di volte che deve eseguire il file
       var newst = <?php echo $utentitot; ?>;
	var progressione=0;
	$("#loader").show();
	//foreach(newsc = 0; newsc < newst; newsc++) 
	//{
	for (i=0;i<newst+1;i++)
	{
		$.ajax({
			type: "GET",
			url: "testnewsinvioeff.php?progressione=" + progressione,
			data: "",
			success: function(response) 
			{ 
				
				progressione = response; 
				//alert(progressione);
			}
		});
		}
	//}
	$("#loader").hide();
		
		
});
Prima appariva il loader ora no...
sembra che "progressione" non venga aumentato ma riportato sempre a zero. Questo credo perchè ho dichiarato la variabile uguale a 0 ma se non la dichiaro non funziona...
 
Ultima modifica:
l'alert che hai messo riporta sempre 0?

Questa parte non l'ho capita:

PHP:
  if($progressione==$utentitot)
        {
                Fine ciclo perchè utenti è Uguale a progressivo
                echo $progressione;
        }
        else
        {      
                echo $progressione;
        }

Fai un if che però restituisce il medesimo risultato in entrambi i casi, e hai scritto un commento senza //...
 
il commento te l'ho scritto al volo e non ho messo gli apici ma nel codice non c'è quel commento.
io mi faccio un echo di progressione e poi l'idea era di mettere un if nel jquery dove se progressione è maggiore di utentimax usciva dal ciclo e finiva.
Essendo una chiamata ajax se quando finiscono gli invii mettessi un header a un'altra pagina va bene?
Alert mi restituisce sempre 3 e nel file (che dovrebbero essere le mail inviate) invia sempre le prime 3
 
prova a cambiare

PHP:
echo $progressione;

con ad esempio
PHP:
echo "20";

e vedi se ti da ancora 3 come risultato
 
È come se tutte le volte che torna alla chiamata ajax assegna alla variabile progressione il valore 0. Ma se non inizializzazione la variabile da errore.
 
Codice:
     $.ajax({
            type: "GET",
            url: "testnewsinvioeff.php",
            data: "progressione=" + progressione,
            success: function(getprogressione){
               progressione = getprogressione;
     }
    });

prova con questo ajax invece di quello di prima.. boh

e prova con questo php di prova..

PHP:
<?= echo $_GET["progressione"] + 1; ?>

per vedere se il problema è di ajax o di php
 
Ultima modifica:
mi dice:

Uncaught ReferenceError: progressione is not defined

Il problema è secondo me questo: Dichiarando progressione=0 lui la inizializza a 0 tutte le volte e quindi invia sempre e solo le prime 3. Come fare allora?
 
Ultima modifica:
il problema sta nel ciclo for perchè ora funziona però premendo manualmente il tasto e aumenta di 3 come stabilito.
 
con le modifiche effettuate ora sono riuscito a tener gtraccia di progressione ma per farlo andare avanti devo ricliccare sul pulsante e allora va avanti...
 
Codice:
var newst = <?php echo $numutentimax; ?>;
var progressione=0;
	for (i=0;i<newst;i++)
	{
		  $('#5').html(i+' uguale a 0');
		  $.ajax({
		  type: "GET",
		  url: "testnewsinvioeff.php",
		  data: "progressione=" + progressione ,
		  dataType: "html",
		  success: function(msg)
		  {
			progressione=msg;
			$("#risultato").html(progressione);
		  },
		  error: function()
		  {
			alert("Chiamata fallita, si prega di riprovare...");
		  }
    });

Questo ciclo così come è tira fuori solo e sempre i primi 3... HELP...
 

Discussioni simili