![]() |
[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. |
Re: [D4PHP] Ajax-Beispiel - "findet ein Redraw-statt?&a
Zitat:
PHP ist, auch wenn die VCL/PHP auf den ersten Blick klasse anmutet, immer noch PHP. Und die VCL/PHP sind nunmal bisher die allerersten 'Controls' die PHP kennt. Das bedeutet: Für alles, was die PHP-Controls nicht können musst Du eigene Controls schreiben. -> Viel Code, viel Zeit, viel Testaufwand. Die Grenze von 5x mehr PHP-Code wie in ASP.NET nötig wären wird vielleicht auf 3,5 mal reduziert wenn man D4PHP nimmt, aber es sind immer noch kräftige Faktoren die da reinspielen. Ich halte PHP einfach nicht mehr für das Mittel der Wahl, eine neue, komplexe Webanwendung zu beginnen. ASP.NET hatte PHP schon bei weitem überholt als es rausgekommen ist. Da muss im Bereich VCL/PHP noch massigst nachgereicht werden, um den Komfort zu ermöglichen. Das braucht sicher noch mindestens zwei Jährchen bis beides in etwa gleich mächtig ist. Edit Nachtrag: Ich will D4PHP nicht schlecht machen. Ich benutze es ja selber. Aber nicht für den Ersatz von Clientanwendungen, sondern um 2 bestehende PHP-Projekte ineinander zu integrieren und dafür fehlende Funktionalitäten zu ergänzen. Aber wenn es komplette neu zu erstellende Anwendungen geht halte ich PHP aus mehreren Gründen nicht für das richtige Werkzeug dafür. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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