![]() |
[D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?"
Seit gestern Abend teste ich die Delphi for PHP Trial und war besonders gespannt auf das Thema Ajax, d.h. Verzicht auf einen Redraw der kompletten Seite. Zum Glück gibt es ein Sample Project BasicAjax.phprj. Dies tut auch soweit.
Nur: Wie kann ich testen, ob wirklich nicht ge-re-drawed wird (auch wenn die Logik des Codes tatsächlich besagt, dass zumindest kein neuer Request an den Server geschickt wird). Ich dachte mir folgendes: Ich habe einfach einen Label2 angelegt, der im OnShow-Ereignis des Formulars einen neuen (zufälligen) Wert zugewiesen bekommt.
Code:
Tja, das Lustige ist halt jetzt, dass beim Drücken des Buttons das "Hello from Ajax" im farbigen Feld erscheint, aber eben auch Label2 seine Caption ändert. Ich habe mal Button1 und Label1 auf ein Panel1 gelegt und Label2 auf ein Panel2. Das Verhalten ist identisch.
function IndexBeforeShow($sender, $params)
{ $this->Label2->Caption=rand(1,1000); } Hat mir jemand eine Erklärung dafür? Wo liegt mein Denkfehler? Ich muss dazu sagen, dass das jetzt meine ersten Versuche überhaupt mit Ajax sind. [edit=Phoenix]Delphi-Tags in Code-Tags geändert. Obwohl es zwar "Delphi" für PHP ist, kann unser Syntaxhighlighter DAS dann doch nicht :mrgreen: Mfg, Phoenix[/edit] |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
Letzlich bedeutet AJAX folgendes:
Ganz kurz gesagt, werden durch AJAX nicht immer die ganze Seite, sondern nur die Änderungen an einer Webseite vom Server geholt. Ich habe mich mit der VCL für PHP noch nicht beschäftigt, aber es kann sehr gut sein, dass das Script einfach in jedem Callback alle Controls aktualisiert, wenn sich dort etwas ändert. |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
Zitat:
Vielleicht bin ich nur irritiert, dass diese Ereignisse überhaupt ausgelöst werden. Erst das OnShow bzw. BeforeShow-Ereignis führen ja zu einer Veränderung von Label2. Worum es mir aber eigentlich geht: Wie könnte ein Beispiel (Test) aussehen, das beweist, dass bei einer Änderung unbeteiligte Controls auch tatsächlich nicht neu dargestellt werden? Mir scheint es, es findet eben doch ein kompletter Redraw der Seite statt - nur eben kein Reload? |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
In deinem Page-Lifecycle wird doch das Label geändert. Also ist es beteiligt, also wird dessen Inhalt neu Übertragen.
Nochmal: Das PHP-Script wird in jedem Fall komplett durchlaufen. Es werden jedoch lediglich die Änderungen an den Controls an den Client übertragen und dort angewendet. |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
Ist dann so ein "Beweis", dass kein Redraw stattfindet, gar nicht möglich, weil ich mit dem Experiment das Control verändere und damit den Redraw erzwinge?
OK, ich glaube, ich sehe ein, dass ich mich um andere Fragen innerhalb der D4PHP Evaluation kümmern sollte. Z.B. vermisse ich ein DrawGrid oder StringGrid. |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
Bitte spreche im Zusammenhang mit HTML / CSS nicht von Redraw. Da werden Elemente maximal ausgetauscht, aber nie, gar nie nicht, neu gezeichnet. Es gibt entweder einen kompletten Page Reload oder einen Callback / AJAX-Call.
Ich würde aber jede Wette eingehen, dass es auf dem Formular eine Eigenschaft gibt die Dir sagt, ob Du im Reload oder im Callback bist. Wegen Controls: Ich denke nicht, dass eine Art DrawGrid im Bereich HTML / CSS Sinn machen würde. |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
Zitat:
Natürlich kann sie neu gezeichnet werden, das stört ja auch nicht so krass wie ein Neuladen. (Fokusverlust, inhalten von Controls, Flackern, und vor allem WARTEN) Bin aber glücklicherweise kein Webfritze, löcher' also lieber Phoenix. :) |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
Zitat:
Eigentlich geht es mir darum, inwiefern ich eine Delphi-Rich-Client-EXE durch eine D4PHP-Browser-Lösung (zumindest partiell) ersetzen kann oder welche Nachteile unvermeidlich sind. |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?
Hallo,
der Sinn von Ajax ist das Nachladen von dynamischen Inhalten, ohne die statischen Inhalte auch neuzuladen. Da solltest du der VCL for PHP einfach vertrauen, die macht das schon richtig ;-) EDIT: Vorausgesetzt, du baust das ganze richtig auf. Ein PHP-Script wird auf jeden Fall komplett ausgeführt. Nur wenn deine "index.php" die statischen Inhalte + ein JavaScript an den Webbrowser schickt, und dieses JavaScript dann die dynamischen Inhalte von einer "content.php?module=xy&id=42" nachlädt, haut das hin. |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?
Zitat:
Aber ich nehme Dich beim Wort, stelle die in diesem Thread diskutierten Experimente ein und vertraue, was das Thema Reload und Flackern anbelangt, den Fähigen der PHP-VCL von D4PHP. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz