Domanda

C'è un modo per mostrare una barra di avanzamento in php? Mi piace far sapere all'utente cosa sta facendo lo script php.

Ecco un esempio di risultato dal mio sito web http: // www.bestsellprice.com/search.php?itemnum=0&keyword=harry+potter+book

Ho un'immagine di caricamento statico con del testo che dice " Caricamento ... " ;, quando la pagina è completamente caricata, nascondo il div di caricamento. Il mio script php esce su amazon api, ebay api e screen raschia un paio di altri siti e invece di un div di caricamento statico vorrei aggiornare quel div di caricamento con il seguente

Caricamento amazon.com

// progress amazon, al termine dell'aggiornamento caricamento div

Caricamento ebay.com

ecc. ecc.

È possibile farlo? in tal caso qual è l'approccio migliore? Grazie in anticipo per l'aiuto!

È stato utile?

Soluzione

Usa AJAX per chiedere a PHP cosa sta facendo in questo momento e disponi di un sistema di code che definisce quali attività sono state completate o meno. Ecco un esempio molto semplice:

All'avvio dell'attività, impostare le seguenti variabili:

Usa AJAX per chiedere a PHP cosa sta facendo in questo momento e disponi di un sistema di code che definisce quali attività sono state completate o meno. Ecco un esempio molto semplice:

All'avvio dell'attività, impostare le seguenti variabili:

<*>

Una volta che PHP carica eBay, imposterà isEbayLoaded su true, e quindi AJAX potrebbe semplicemente chiedere a PHP se ebay è stato ancora caricato, quindi Amazon, quindi qualsiasi altra cosa ti serva. Tutto ciò che PHP dovrebbe fare è controllare se quelle variabili sono state impostate come vere, il che significherebbe che i compiti erano stati completati.

SESSION['isEbayLoaded'] = false;

Usa AJAX per chiedere a PHP cosa sta facendo in questo momento e disponi di un sistema di code che definisce quali attività sono state completate o meno. Ecco un esempio molto semplice:

All'avvio dell'attività, impostare le seguenti variabili:

<*>

Una volta che PHP carica eBay, imposterà isEbayLoaded su true, e quindi AJAX potrebbe semplicemente chiedere a PHP se ebay è stato ancora caricato, quindi Amazon, quindi qualsiasi altra cosa ti serva. Tutto ciò che PHP dovrebbe fare è controllare se quelle variabili sono state impostate come vere, il che significherebbe che i compiti erano stati completati.

SESSION['isAmazonLoaded'] = false;

Una volta che PHP carica eBay, imposterà isEbayLoaded su true, e quindi AJAX potrebbe semplicemente chiedere a PHP se ebay è stato ancora caricato, quindi Amazon, quindi qualsiasi altra cosa ti serva. Tutto ciò che PHP dovrebbe fare è controllare se quelle variabili sono state impostate come vere, il che significherebbe che i compiti erano stati completati.

Altri suggerimenti

L'ho già realizzato con una soluzione davvero semplice:

ob_flush();

Tutto ciò che serviva era creare un singolo div con nomi di classe appropriati:

<div class="loading">
    Loading...
</div>

Quindi, il mio PHP era sostanzialmente:

foreach ($sites as $site) {
   printAndFlush(<<<CSS
     <style>
       div.loading {
         background: url($site.png) no-repeat right center;
       }
     </style>
CSS;

   scrapeSite($site);
}

Questo userebbe uno stile di sfondo per mostrare quale sito stai raschiando.

Se devi utilizzare il markup, puoi semplicemente stampare un nuovo " Caricamento " div ogni volta (con un ID univoco), insieme a uno stile per impostare lo stile del div precedente su " display: none " ;.

Naturalmente, ricorda che alcuni browser richiedono almeno 1024 byte (qualcosa di 4k!) prima di eseguire il rendering di qualsiasi cosa.

L'approccio migliore è fare in modo che il tuo javascript effettui chiamate ajax al server e scopri dove si trova, in modo da poter fornire un feedback all'utente.

Puoi iniziare con una barra di avanzamento per il caricamento, quindi puoi continuare a mostrare l'avanzamento dell'applicazione.

Vorrei fare una richiesta per ogni sito e utilizzare l'output da quella pagina (XML, JSON, qualunque cosa) per far sapere all'altra pagina cosa sta succedendo.

Ad esempio ... codice psuedo:

  • raccogli siti
  • per il ciclo che carica la pagina Ajax
  • la pagina Ajax restituisce ogni richiesta con un messaggio di stato, ad es. - " Caricamento Amazon .... "

Questo è tutto!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top