2010-12-17 3 views
2

Ich bin auf der Suche nach einer Lösung, so dass die PHP-Seite wird alle anderen Informationen laden sagen die Inhalte/Bilder, wenn überhaupt und dann eine Operation, die wird einige Zeit brauchen, um seine Ergebnisse zu vervollständigen und zu zeigen.Ich möchte die PHP-Seite zuerst mit anderen Informationen laden und dann eine Operation

Da die Operation lange dauert, lädt die PHP-Seite zu langsam. Ich möchte, dass mein Klient zuerst die Seite sieht und dann die Operation durchführt, die am Ende das Ergebnis zeigt.

Ich versuchte mit der ob_start() & flush() aber war erfolglos. Es kann Javascript erforderlich sein, um die Operation zu initiieren, denke ich. Aber wie kann ich das einteilen?

+0

gleiche Art und Weise wie immer. In 'onLoad'. –

+0

Sie meinen mit Javascript. Bitte geben Sie –

+1

an. Ja, Javascript (AJAX) ist eine gebräuchliche Option für solche Funktionen. Ich kann empfehlen, in jQuery zu suchen. Das macht Ajax viel einfacher als das Schreiben selbst. –

Antwort

0

Sie müssen die Seite ohne den "langsamen Anruf" laden. Führen Sie entweder im onload-Ereignis oder in einem Skript am Ende der Webseite einen XHR-Aufruf an den Server durch, um die langsamen Daten zu erhalten. Der Aufruf ist standardmäßig asynchron, sodass der Benutzer mit der Webseite interagieren kann, während er auf die Rückkehr des Anrufs wartet. An diesem Punkt würden Sie die Daten erfassen und mit JavaScript in HTML konvertieren.

+0

ergab, können Sie einige Links geben, die das gleiche tun, um zu verweisen. so dass ich die Arbeit verstehen und es in meinem machen kann –

1

Ist das eine PHP-Operation? Da PHP eine serverseitige Sprache ist, wird es ausgeführt, bevor der Benutzer die HTTP-Antwort erhält. Sie müssten also zuerst die Site erstellen. Senden Sie das an den Benutzer. Dann erstellen Sie eine neue Anfrage (zum Beispiel mit AJAX) an das Skript, das die Operation ausführen muss. Dies ist der Bestellcode sollte ausgeführt werden.

  • PHP (Serverside): Erstellen Sie Ihre Website wird Haupt PHP-Code
  • HTML (Clientside) ausgeführt: HTML erstellen, Bilder und Javascripts Dateien
  • Javascript (Clientside) geladen werden: Erstellen Sie ein neues httprit (asynchron) zu einer PHP-Datei mit Ihrer Arbeit. Achten Sie auf Zeitüberschreitungen wegen der langen Zeit, die die Operation dauern kann. Legen Sie bei Bedarf eine benutzerdefinierte Timeout-Zeit fest.
  • PHP (Serverside): Führen Sie die lange Operation und geben Sie das Ergebnis (Stellen Sie sicher, dass Ihr php Server nicht Timeout ist, denke Standard ist 30 Sekunden für die meisten Server)
  • Javascript (Clientside): Tun Sie etwas mit dem Ergebnis der Ajax-Handler.

Einige handliche Links.

Ajax tutorial of w3schools
jQuery ajax api with examples

-1

Sie onload verwenden, ein zeitgesteuertes Ereignis in sehr kurzer Zeit auszulösen. Dadurch wird der Bildschirm gezeichnet.

Wenn das Ereignis ausgelöst wird, starten Sie Ihren langen Prozess mit AJAX-Techniken.

Sie können nicht versuchen, einen Prozess auf dem Server für eine lange Zeit auszuführen. Nach einer Weile (normalerweise 300 Sekunden) wird der Server-Thread durch einen Run-Away-Timer beendet. Um dies zu vermeiden, muss Ihr langer Prozess entweder ein Abfragesystem verwenden oder nicht in einer normalen Webserverumgebung ausgeführt werden.

Wenn es für mehr als 20 oder 30 Sekunden ausgeführt wird, dann speichern Sie eine Form des Status in der Sitzung und eine "funktionierende" Antwort zurück. Verwenden Sie die Antwort, um den Benutzer über den Fortschritt zu informieren, bevor Sie den nächsten Zyklus starten. Diese lädt und positioniert sich selbst die Sitzungsdaten und läuft für eine weitere kurze Zeit.

Warnung - PHP wird sorgfältig alle Zugriffe auf die Sitzungsdaten serialisieren, so dass alle vom Benutzer gesendeten Daten während der Verarbeitung eines Zyklus auf diesen Zyklus warten, bevor er verarbeitet wird.

1

jQuery macht diese unglaublich einfach, als solche ...

<script type="text/javascript" src="jquery-1.4.4.min.js"></script> <!-- Put this in your web page's head --> 
<script type="text/javascript"> 
$(function() { 
    $('wherever-you-need-the-resulting-html-to-go').html('<img src="loading-image.gif" alt="Loading" />'); 
    $.ajax({ 
     url: 'wherever-your-slow-code-is.php', 
     success: function(msg) { 
      $('wherever-you-need-the-resulting-html-to-go').html(msg); 
      } 
     }); 
    }); 
</script> 
+0

Setzen Sie Ihre langsame Funktion in eine separate PHP-Datei. Der obige Ajax-Aufruf fragt die Funktion ab und fügt die Daten nach der Verarbeitung an der Stelle ein, an die sie gehen soll. – 65Fbef05

+0

Dies setzt voraus, dass der Client Javascript hat und daher nicht 100% so zuverlässig ist wie die Inline-Verarbeitung von der anfänglichen PHP-Seite. Noch +1 für ein solides Codebeispiel. – zanlok

+0

Sie können Ihre mehrteilige Seite nicht laden und auch nicht essen? Ha, ha! – 65Fbef05

Verwandte Themen